如何在android中使用room加载db文件
我正在开发一个android应用程序。 我创建了一个“.db”文件 我想使用这个db文件作为我的android应用程序的数据库。 我正在用这个房间。 我试图找到解决办法,但找不到如何在android中使用room加载db文件,android,sqlite,kotlin,android-room,Android,Sqlite,Kotlin,Android Room,我正在开发一个android应用程序。 我创建了一个“.db”文件 我想使用这个db文件作为我的android应用程序的数据库。 我正在用这个房间。 我试图找到解决办法,但找不到 @Database(entities = [Item::class], version = 1) @TypeConverters(ObjectConverter::class) abstract class MyDatabase : RoomDatabase() { abstract fun itemDao(
@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()
}
}
}
我试着升级代码,但没用
x.db
文件放入assets/databases
文件夹sqlAssets
MyDatabase
类中,按如下方式构建RoomDB
:
Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, x.db")
.openHelperFactory(new AssetSQLiteOpenHelperFactory())
.allowMainThreadQueries()
.build();
附言:你在用科特林。这是Java代码。我还不认识Kotlin。我应该使用外部库吗?不是库。只有几个助手类。从我提供的链接下载。全部归功于那个家伙。:)