有没有办法在 Room 中使用 SQLiteDatabase?

Is there a way to use SQLiteDatabase with Room?

我需要能够执行一些使用 SQLiteDatabase 可以轻松完成的操作,但我正在使用 Room。有没有办法为 Room 数据库获取 SQLiteDatabase 对象的实例?我已经尝试过 RoomDatabase 对象,但与 SQLiteDatabase.

相比,可用的操作非常有限

RoomDatabasegetOpenHelper(), which returns a SupportSQLiteOpenHelper. As with SQLiteOpenHelper, SupportSQLiteOpenHelper offers getReadableDatabase() and getWritebleDatabase() methods. Those return a SupportSQLiteDatabase.

SupportSQLiteDatabaseSQLiteDatabase 不完全相同,但很接近,并且它受更多 SQLite 实现的支持,而不仅仅是框架 SQLite。

是的,您可以轻松获得 SQLite 数据库,但不能通过 Room。

例如假设传递给 databaseBuilder 的数据库名称在 TheDatabase class 中定义为常量 DATABASE_NAME 那么您就可以使用了。此外,a_context 是上下文 (例如,通过在 activity 中使用 this

 SQLiteDatabase sqlitedb = SQLiteDatabase.openDatabase(a_context.getDatabasePath(TheDatabase.DATABASE_NAME).getPath(), null, SQLiteDatabase.OPEN_READWRITE);

显然,您需要小心使用 Room 和上面的(可能确保每个在另一个打开之前发出关闭)。