如何在Android中使用Room加载数据库文件

时间:2018-08-09 10:48:35

标签: android sqlite kotlin android-room

我正在开发一个android应用。 我创建了一个“ .db”文件。

我想将此数据库文件用作我的Android应用程序的数据库。 我正在使用房间。 我试图找到任何解决方案,但找不到。

@Database(entities = [Item::class], version = 1)
@TypeConverters(ObjectConverter::class)
abstract class MyDatabase : RoomDatabase() {

    abstract fun itemDao(): ItemDao

    companion object {

        private const val DATABASE_NAME = "my.db"

        private var INSTANCE: MyDatabase? = null

        private val lock = Any()

        fun getInstance(context: Context): MyDatabase {
            synchronized(lock) {
                if (INSTANCE == null) {
                    initDatabase(context, DATABASE_NAME)
                    INSTANCE = Room.databaseBuilder(context.applicationContext,
                            MyDatabase::class.java, DATABASE_NAME)
                            .addCallback(object : Callback() {
                            })
                            .build()
                }
                return INSTANCE!!
            }
        }

        private fun initDatabase(context: Context, databaseName: String) {
            val dbPath = context.getDatabasePath(databaseName)
            if (dbPath.exists()) {
                return
            }

            dbPath.parentFile.mkdirs()
            val reader = BufferedReader(context.assets.open(databaseName).reader())
            val writer = FileWriter(dbPath)

            var line: String?
            do {
                line = reader.use { readLine() }
                if (line == null)
                    break

                writer.use { it.write(line) }
            } while (true)
            writer.flush()
        }
    }
}

我试图上层代码,但是它不起作用。

1 个答案:

答案 0 :(得分:0)

  1. 生成x.db文件DB Browser for SQLite
  2. x.db文件放入assets/databases文件夹
  3. this repo下载文件
  4. 将这些文件放入软件包sqlAssets
  5. 在您的MyDatabase类中,像这样构建RoomDB

    Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, x.db")
    .openHelperFactory(new AssetSQLiteOpenHelperFactory())
    .allowMainThreadQueries()
    .build();
    

P.S:您正在使用Kotlin。这是Java代码。我还不了解科特林。