Как написать запрос, чтобы получить версию базы данных из хранилища файлов базы данных в SD - PullRequest
0 голосов
/ 22 мая 2018

Я знаю, что мы должны использовать PRAGMA user_version, этот запрос, чтобы получить версию БД.Но execSQL не работает с этим запросом. Как написать этот запрос в Android, чтобы получить версию БД из файла .db

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Ваша проблема в том, что execSQL не позволяет возвращать значения / данные.Согласно: -

Выполните один оператор SQL, который НЕ является SELECT, или любой другой оператор SQL, который возвращает данные. SQLiteDatabase - execSQL

Вы можете использовать метод getVersion, который возвращает номер версии в виде целого числа.В качестве альтернативы вы можете использовать любой метод rawQuery, который будет возвращать курсор, из которого можно извлечь значение, например

public int myGetversion() {
    int rv = 0;
    Cursor csr = this.rawQuery("PRAGMA user_version");
    if csr.moveToFirst() {
        rv = csr.getInt(0);
    }
    csr.close;
    return rv;
}
  • В приведенном выше кодировании предполагается кодирование в подклассе SQLiteOpenHelper, поэтому this эквалайзеров в базу данных SQLIteDatabase.
  • 0 будет возвращено в очень маловероятном сценарии, когда по какой-то причине пользовательская версия не может быть извлечена.

или вы можете скопировать то, что делает getVersion, используя DatabaseUtils longForQuery метод.

например

public int myGetVersion() {
    return ((Long) DatabaseUtils.longForQuery(this, "PRAGMA user_version;", null)).intValue();
}
0 голосов
/ 22 мая 2018

Вы можете использовать SQLiteDatabase#getVersion(), который, в свою очередь, реализован как:

public int getVersion() {
    return ((Long) DatabaseUtils.longForQuery(this, "PRAGMA user_version;", null)).intValue();
}

rawQuery(), как правило, тоже будет работать для SQL, где вас интересуют строки результатов.

...