持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
JetPack----Room
在任何一个程序中,无外乎就是在不停的和数据进行交互,不停的去操作数据。在Android中就会遇到一些问题,比如一些关键性的信息我不希望内存回收、程序意外终止而导致数据丢失。这个时候我们就需要让我们的数据持久化。在Android中我们是怎么样让我们的数据持久化呢?Android系统中主要提供了三种方式便于我们实现数据持久化功能:文件存储,SharePreferences存储和数据库存储。下面我们那就数据库存储进行详细的讲解。
Sqlite是一款轻量级的关系型数据库,他的运算速度非常的快,占用资源很少。并且只要你之前使用过其他的关系型数据库,你就会很快的上手Sqlite,在最开始学习Android开发的时候我想大家都忘不了SQLiteOpenHelper,我们操作数据库都是通过它来进行操作,我们主要的使用步骤如下:
-
通过SQLiteOpenHelper的两个实例方法
getReadableDatabase()、getWriteableDatabase()来进行数据的创建或者打开创建的数据库文件后缀是
*.db,通常存放在data/data/<package name>/databases/目录下 -
然后我们在实现的Helper类中实现自己业务逻辑Sql查询数据的封装
class myDataBaseHelper(val context:Context,name:String,version:Int):SQLiteOpenHelper(context,name,null,version){
//数据库创建时会调用OnCreate
override fun onCreate(db:SQLiteDataBase){
db.execSQL("SQL语句")
}
override fun onUpgrade(db:SQLiteDataBase,oldVersion:Int,newVersion:Int){
}
//可以在此进行自己的Sql业务封装
fun testSql(db:SQLiteDataBase){
db.execSQL("")
}
}
class MainActivity : Activity(){
val dbHelper = myDataBaseHelper(this,"Demo.db",1)
override fun onCreate(db:SQLiteDataBase){
val db = dbHelper.getReadableDatabase()
dbHelper.testSql(db)
}
}
以前是用Sqlite进行本地化开发大家都离不开这样的开发模式,需要自己去调用原生的API来进行数据的增删改查,这样会让我们的项目代码变得非常混乱并且难以维护,除非你对此进行了很好的封装,为此市面上出现了很多的ORM框架(ORM也叫对象关系映射,将面向对象的编程语言和面向关系的数据库之间建立一种映射关系),为此Google为了方便我们进行开发推出了一个ORM框架-Room,并且将它加入到了JetPack
Room的整体结构分为Entity、DAO、DataBase这三个部分每个部分负责的职责不同:
- Entity:用于定义封装实际数据的实体类,每个实体类都会在库中生成对应生成,并且字段也是自动根据实习类中的字段自动生成
- DAO:数据访问对象,顾名思义,就是用来对数据库进行各项操作的地方,在实际编程中我们就只需要和Dao层打交道
- DataBase:用于定义数据库中的关键信息,包括数据库的版本号,包括那些实体类以及提供Dao层的访问实例
定义实体类
data class Person(
@PrimaryKey(autoGenerate = true)
val name:String,
@ColumInfo("person_age") //表字段名
val age:Int
)
Dao层的实现
interface PersonDao{
@Insert
fun insertPerson(person:Person):Long //返回插入列的索引值
@Update
fun insertPerson(newPerson:Person)
@Query("SELECT * FROM Person")
fun loadAllPerson():List<Person>
@Delete
fun deletePerson(p:Person)
@Query("DELETE * FROM Person")
fun deleteAllPerson()
}