android - Android sqlite INER JOIN 返回数组
问题描述
我正在为 android 使用 sqlite,我想要一个函数,它返回一个包含所有满足条件的对象的数组。我解释:
我有两张桌子: Peliculas
private static final String CREATE_PELICULAS_TABLE =
"CREATE TABLE " + PELICULAS_TABLE + " (" +
KEY_PELICULA_ID + " LONG PRIMARY KEY, "
+ KEY_PELICULA_PORTADA + " BLOB NOT NULL, "
+ KEY_PELICULA_DIRECTOR + "TEXT NOT NULL"
+ ")";
垂饰
private static final String CREATE_PENDIENTES_TABLE =
"CREATE TABLE " + PENDIENTES_TABLE + " (" +
KEY_PENDIENTES_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_PEN_IDSerieOPeli + " LONG NOT NULL );";
在数据库“Pendientes”中,是已添加为待处理 (pendientes) 的电影 (películas) 的 ID。我想要一个通过内部连接返回包含所有电影的数组的函数。
我认为带有内部连接的查询是这样的:
private final String QUERY= "SELECT * FROM PELICULAS_TABLE a INNER JOIN PENDIENTES_TABLE b WHERE a.KEY_PELICULA_ID=b.KEY_PEN_IDSerieOPeli";
我想我也必须使用 rawQuery,但我不确定。
但我不知道如何以数组的形式返回所有电影(peliculas 的项目)。
解决方案
您可以使用 rawQuery 方法或使用推荐的查询方法返回 Cursor。
所以你可以有
Cursor csr = db.rawQuery(QUERY,null);
或者
Cursor csr = db.query("PELICULAS_TABLE a INNER JOIN PENDIENTES_TABLE b",null,"a.KEY_PELICULA_ID=b.KEY_PEN_IDSerieOPeli",null,null,null,null);
您的方法(功能)可能是:-
public ArrayList<Movies> getAllMoviesThatFulfillCondition() {
ArrayList<Movies> rv = new ArrayList<>();
Cursor csr = db.query("PELICULAS_TABLE a INNER JOIN PENDIENTES_TABLE b",null,"a.KEY_PELICULA_ID=b.KEY_PEN_IDSerieOPeli",null,null,null,null);
while (csr.moveToNext()) {
long current_SerieOPeli = csr.getLong(csr.getColumnIndex(KEY_PEN_IDSerieOPeli));
long current_Pelicula_ID = csr.getLong(csr.getColumnIndex(KEY_PELICULA_ID));
byte[] current_Pelicula_Portada = csr.getBlob(csr.getColumnIndex(KEY_PELICULA_PORTADA));
String current_Pelicula_Director = csr.getString(csr.getColumnIndex(KEY_PELICULA_DIRECTOR));
rv.add(new Movie(??????????));
}
csr.close();
return rv;
}
- 笔记
?????????
将根据您构造Movie对象的方式来确定(假设这就是您说对象时的意思, 即 Movie 是对象)。- 如果结果游标中的任何列名不是唯一的(例如,KEY_PELICULA_ID 解析为字符串ID ,并且 KEY_PENDIENTES_ID 解析为字符串“ID”),则您必须使用AS子句来区分它们。
可能您的条件实际上是表应该如何连接。如果是这样,那么您可以在JOIN子句中使用ON子句。例如
private final String QUERY= "SELECT * FROM PELICULAS_TABLE INNER JOIN PENDIENTES_TABLE ON " + PELICULAS_TABLE + "." + KEY_PELICULA_ID + "=" + PENDIENTES_TABLE + "." + KEY_PEN_IDSerieOPeli;
注意以上是原则上的代码,它没有经过测试,也没有经过语法检查,所以它可能包含错误。
推荐阅读
- c# - 正则表达式替换除方括号外的字符串
- node.js - 如何在 Mongoose 和 Nodejs 中创建增量和减量路由
- r - 如何使用或转义 at 符号 @ 以便它可以在 R 包文档中使用?
- javascript - 尝试打开一个新窗口并在其中创建元素
- c++ - 如何在构造函数中访问类变量以在不使用 C++ 中的 this 指针的情况下分配它们
- haskell - 从 Haskell 的列表中返回序列的第一次迭代
- r - 在R中将分组对组合成一个组
- php - 如何通过 sharedprefrence 保存列表数据
- rust - 为什么 Rust 迭代器的 FnMut 是谓词而不是 Fn?
- python - 不能将 2 定义为素数