首页 > 解决方案 > 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 的项目)。

标签: androidarraysdatabasesqlite

解决方案


您可以使用 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 - 查询

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

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;

  • 注意以上是原则上的代码,它没有经过测试,也没有经过语法检查,所以它可能包含错误。


推荐阅读