如何从房间数据库获得SQLite数据库实例引用?



我试图从现有的Room数据库中获得sqliteddatabase实例,用于与已经开发的许多复杂函数一起使用,这些函数接受sqliteddatabase实例作为参数。

我最近迁移到Room,并决定保持一些耗时和长处理功能不受影响,而我的应用程序的一部分使用从Room迁移的功能。(至少在我更熟悉Room之前)。

我不确定这是可能的,它是美妙的,如果我仍然能够得到SQLite数据库。我尝试以下代码检索数据库,但它给了我一个不可转换的错误。

public abstract class Database_ROOM extends RoomDatabase {
public SQLiteDatabase getSQLiteDB()
{
return (SQLiteDatabase) this.mDatabase;
}
}

上面的代码产生以下错误。不能自由兑换的类型;不能将androidx.sqlite.db. supportsqliteddatabase转换为android.database.sqlite. sqliteddatabase

是否有其他方法来获取数据库,或者这是可能的?如有任何帮助,我将不胜感激。

是否有其他方法可以获得数据库,甚至这是可能的?如有任何帮助,我将不胜感激。

与房间你得到一个supportsqliteddatabase通过RoomDatabase getOpenHelper通过getWritableDatabase方法(或getReadableDatabase,但你会得到一个可写的数据库在几乎所有的情况下)。

: -

public SupportSQLiteDatabase getSQliteDB() {
return this.getOpenHelper().getWritableDatabase();
}
  • 请注意,supportsqlitedatase具有sqlitedatase的大部分(但不是全部)功能和方法。

如果你真的想要一个sqlitedatase,你可以这样做:-

public SQLiteDatabase getSQLiteDB(Context context, String databaseName) {
return SQLiteDatabase.openDatabase(context.getDatabasePath(databaseName).getPath(),null,SQLiteDatabase.OPEN_READWRITE);
}

另外

关于评论: -

Cursor c = db.rawQuery("SELECT * FROM "+tableName+"WHERE 0", null);columnNames = c.getColumnNames();tableName作为函数参数出现。我找不到任何资源如何使用Room,而不像您在第二个示例中建议的那样重新启动数据库。

那么你可以使用supportsqliteddatabase的查询方法例如:-

sdb = db.getSQliteDB();
Cursor csr = sdb.query("SELECT * FROM " + tablename + " WHERE 0");
String[] columnNames = csr.getColumnNames();
}
csr.close();

如果你使用RoomDatabase的rawQuery方法,那么您必须知道列名,并拥有一个具有与列名匹配的成员变量的对象。