Android jetpack room 将外部数据库导入到本地数据库(附带创建Sqlite3的教程)
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android jetpack room 将外部数据库导入到本地数据库(附带创建Sqlite3的教程)相关的知识,希望对你有一定的参考价值。
main目录下新建
assets目录 并将数据库文件弄进来
这个test.db使我们自己生成的。。如何生成。。首先你需要安装sqlite3
下载地址:https://www.sqlite.org/download.html
下载这两个
将文件解压到一个目录里面 并配置环境变量 K:\\develop\\environment\\sqllite\\sqlite-tools-win32-x86-3380500
配置好后就可以使用命令行sqlite3 来检查是否完成
新建数据库步骤
然后使用Navicat
文件-》 新建链接-》 选择sqllite3
连接名也写test即可新建完成
新建完成后新建student表
随便模拟两条数据
之后我们要用这个数据导入到as工程当中
main目录下新建
assets目录 并将test.db数据库文件弄进来
修改mydateBase文件
package com.anguomob.jecpack.database
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.anguomob.jecpack.bean.Student
import com.anguomob.jecpack.dao.StudentDao
import okhttp3.internal.Internal.instance
@Database(entities = [Student::class], version = 1, exportSchema = true)
abstract class MyDataBase : RoomDatabase()
companion object
var DATABASE_NAME = "my_db.db"
private lateinit var instance: MyDataBase
fun getSingle(context: Context): MyDataBase
if (::instance.isInitialized.not())
instance = Room.databaseBuilder(
context.applicationContext,
MyDataBase::class.java,
DATABASE_NAME
)
// .allowMainThreadQueries()//允许主线程操作数据库
// .addMigrations(MIGATION_1_2, MIGATION_2_3, MIGATION_3_4)
//出现异常问题 重建数据表,同时数据也会丢失。
// .fallbackToDestructiveMigration()
.createFromAsset("test.db")
.build();
return instance;
abstract fun getStudentDao(): StudentDao
重点关注这句话
.createFromAsset("test.db")
然后就是将数据库test.db copy到本地的my_db.db
手机显示数据
数据bean也要跟着变化哦
package com.anguomob.jecpack.bean
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
@Entity(tableName = "student")
data class Student(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id", typeAffinity = ColumnInfo.INTEGER)
var id: Int,
@ColumnInfo(name = "name", typeAffinity = ColumnInfo.TEXT)
var name: String,
@ColumnInfo(name = "age", typeAffinity = ColumnInfo.INTEGER)
var age: Int,
/**
* V3
*/
// @ColumnInfo(name = "sex", typeAffinity = ColumnInfo.INTEGER)
// var sex: Int,
/**
* V4
*/
// @ColumnInfo(name = "sex", typeAffinity = ColumnInfo.TEXT)
// var sex: String,
// @ColumnInfo(name = "bar_data", typeAffinity = ColumnInfo.INTEGER)
// var bar_data: Int
)
// @Ignore
// constructor(name: String, age: Int) : this(0, name, age, "M", 1)
@Ignore
constructor(name: String, age: Int) : this(0, name, age)
@Ignore
constructor(id: Int) : this(id, "", 0)
至此。数据库迁移到手机工作就完成了。
以上是关于Android jetpack room 将外部数据库导入到本地数据库(附带创建Sqlite3的教程)的主要内容,如果未能解决你的问题,请参考以下文章
Android Jetpack: Room | 中文教学视频
Android Jetpack Paging 3:带 Room 的 PagingSource
Android jetpack room 记录数据库升级日志