首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android sqlite INER JOIN返回数组

Android sqlite INER JOIN返回数组
EN

Stack Overflow用户
提问于 2018-09-28 01:19:01
回答 1查看 208关注 0票数 -1

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

我有两张桌子: Peliculas

代码语言:javascript
复制
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"
                + ")";

潘迪恩特斯

代码语言:javascript
复制
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)的In。我想要一个函数,它通过一个内部连接返回一个包含所有电影的数组。

我认为带有内连接的查询如下所示:

代码语言:javascript
复制
private final String QUERY= "SELECT * FROM PELICULAS_TABLE a INNER JOIN PENDIENTES_TABLE b WHERE a.KEY_PELICULA_ID=b.KEY_PEN_IDSerieOPeli";

我想我也必须使用rawQuery,但我不确定。

但我不知道如何在一个数组中返回所有这些电影(骨盆项目)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 05:02:57

您可以使用rawQuery方法或推荐的查询方法返回游标。

所以你可以选择

代码语言:javascript
复制
Cursor csr = db.rawQuery(QUERY,null);

代码语言:javascript
复制
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

你的方法(函数)可以是:-

代码语言:javascript
复制
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;
}

如果结果游标中的任何列名不是唯一的(例如,KEY_PELICULA_ID解析为字符串ID,KEY_PENDIENTES_ID解析为字符串"ID"),则必须使用作为<>E220

  • )来区分它们。

  • 可能您的条件实际上就是表应该如何连接。如果是这样,那么您可以在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;

  • NOTE以上是原则上的代码,它没有经过测试,没有经过系统检查,因此可能包含错误。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52542122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档