如何编写查询以从SD中的db文件存储获取数据库版本

时间:2018-05-22 12:48:19

标签: android sqlite android-sqlite

我知道我们必须使用PRAGMA user_version;这个查询来获取db版本。 但execSQL不能使用此查询。如何在android中编写此查询以从.db文件中获取db版本

2 个答案:

答案 0 :(得分:3)

您可以使用SQLiteDatabase#getVersion(),而isnull又实现为:

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

rawQuery()通常也适用于您对结果行感兴趣的SQL。

答案 1 :(得分:0)

您的问题是execSQL不允许返回值/数据。按照: -

  

执行一个非SELECT或任何其他SQL的SQL语句   返回数据的语句。   SQLiteDatabase - execSQL

您可以使用getVersion方法将版本号作为int返回。或者,你可以使用rawQuery方法返回一个Cursor,你可以从中提取值,例如。

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 eqautes到SQLIteDatabase。
  • 0将在非常不可能的情况下返回,因为某些原因无法提取用户版本。

或者您可以使用DatabaseUtils getVersion方法复制longForQuery本身所执行的操作。

e.g。

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