我试图从现有的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方法,那么您必须知道列名,并拥有一个具有与列名匹配的成员变量的对象。