【问题标题】:Android sqlite INER JOIN return arrayAndroid sqlite INNER JOIN 返回数组
【发布时间】:2019-03-03 16:07:10
【问题描述】:

我正在为 android 使用 sqlite,我想要一个函数,它返回一个包含所有满足条件的对象的数组。我解释一下:

我有两张桌子: 鹈鹕

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 创建一个包含结果数据的列表(或数组)。你知道如何使用光标吗?
  • 不多,但我可以试试。
  • 也许this 有帮助

标签: android arrays database sqlite


【解决方案1】:

您可以使用 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);

SQLiteDatabase - query

您的方法(功能)可能是:-

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;

  • 注意以上是原则性代码,未经测试未经过语法检查,因此可能包含错误。

【讨论】:

  • 我认为这正是我正在寻找的。感谢所有的解释,我明白了一切。非常感谢先生!
猜你喜欢
  • 2018-06-27
  • 2018-10-22
  • 1970-01-01
  • 2020-09-19
  • 2012-08-10
  • 2023-03-16
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多