代码之家  ›  专栏  ›  技术社区  ›  dev.farmer

如何在android中使用room加载db文件

  •  -1
  • dev.farmer  · 技术社区  · 8 年前

    我正在开发一个android应用程序。

    我想用这个数据库文件作为我的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 回复  |  直到 8 年前
        1
  •  0
  •   user3403807 user3403807    8 年前
    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();