【发布时间】:2018-03-17 00:01:18
【问题描述】:
我正在尝试通过使用 Room 库指定其路径来访问 Android 内部存储上的数据库。到目前为止,我一直在使用以下语句:
dbPath = "/data/data/my.sqlitetesting/files/database/myDataBase.db";
SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
如何使用 Room 访问此数据库?
【问题讨论】:
-
AFAIK 你必须实现自定义
SupportSQLiteOpenHelper和SupportSQLiteOpenHelper.Factory然后使用RoomDatabase.Builder.openHelperFactory....AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").openHelperFactory(customFactory)build(); -
首先,将 Room 放在一边。永远不要硬编码路径。对于许多 Android 设备,基于操作系统版本或用户(例如,辅助帐户),该硬编码值是错误的。您的硬编码值或多或少映射到
new File(new File(getFilesDir(), "database"), "myDataBase.db"))。但是我同意塞尔文的观点;因为您的数据库位于非标准位置,AFAIK 您将需要一个自定义的SupportSQLiteOpenHelper,它可以在运行时派生正确的位置。 -
'@CommonsWare 你是对的,我实际上并没有对其进行编码,我只是想展示这样的路径可能是什么样子。
-
但是,我们将如何实现
SupportSQLiteOpenHelper?因为,我们需要返回SupportSQLiteDatabase。实现SupportSQLiteOpenHelper接口,与扩展SQLiteOpenHelper(是一个抽象类)不同
标签: android sqlite android-sqlite android-room