Android sqlite INER JOIN возвращаемый массив - PullRequest
0 голосов
/ 27 сентября 2018

Я использую sqlite для Android и хочу функцию, которая возвращает массив со всеми объектами, которые удовлетворяют условию.Я объясняю:

У меня есть две таблицы: 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"
                + ")";

Pendientes

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" указаны идентификаторы фильмов (películas), которыебыли добавлены как ожидающие (pendientes).Мне нужна функция, которая через внутреннее объединение возвращает массив со всеми этими фильмами.

Запрос с внутренним объединением, я думаю, выглядит примерно так:

private final String QUERY= "SELECT * FROM PELICULAS_TABLE a INNER JOIN PENDIENTES_TABLE b WHERE a.KEY_PELICULA_ID=b.KEY_PEN_IDSerieOPeli";

Думаю, я бытоже использовать rawQuery, но я точно не знаю.

Но я не знаю, как вернуть все эти фильмы (элементы пеликулы) в массиве.

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете вернуть Cursor, используя метод rawQuery или поочередно, используя рекомендованный метод запроса.

Таким образом, вы можете получить либо

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 (при условии, что вы имеете в виду, когда говорите объекты т.е. фильм - это объект).
  • Если какие-либо имена столбцов в результирующем курсоре не являются уникальными (например, например, KEY_PELICULA_ID преобразуется в строку ID , а также KEY_PENDIENTES_ID преобразуется в строку "ID"). Вам придется различать их, используя AS предложение.
  • Возможно, ваше условие действительно о том, как таблицы должны быть объединены.Если это так, то вы можете использовать предложение ON в предложении JOIN .например, private final String QUERY= "SELECT * FROM PELICULAS_TABLE INNER JOIN PENDIENTES_TABLE ON " + PELICULAS_TABLE + "." + KEY_PELICULA_ID + "=" + PENDIENTES_TABLE + "." + KEY_PEN_IDSerieOPeli;

  • ПРИМЕЧАНИЕ Выше приведен принципиальный код, он не был проверен и не проверен на синтаксис, поэтому он может содержать ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...