SQLite
简述数据持久化存储SQLiteOpenHelper创建数据库继承SQLiteOpenHelper,如下所示:使用插件 Database Navigator 查看初始化方法:
升级数据库增删查改
简述数据持久化存储
mmkv使用的是短数据存储,同步,速度快。DataStore 异步存储,总体速度优于 SharedPreferences,是谷歌预备替换之的解决方案。Context 的 openFileOutput()方案… 嗯???SQLite 适用于结构复杂、数据条目量大的应用场景
SQLiteOpenHelper
抽象方法 onCreate() 创建数据库
onUpgrade() 升级数据库
getReadableDatabase() 和 getWritableDatabase() ,都可以创建或打开一个数据库(存在打开,否则创建),并返回一个新的数据库用于读写,不同的是,若磁盘已满或无法写入,getReadableDatabase()可只读方式打开,getWritableDatabase()则报错
数据库类型对比:
KotlinSQLiteIntintegerFloatrealStringtext二进制blob
创建数据库
继承SQLiteOpenHelper,如下所示:
class MyDatabaseHelper(val context: Context, name: String, version: Int) :
// context, 数据库名,自定义的Cursor,版本号
SQLiteOpenHelper(context, name, null, version)
{
// primary key 表示将 id 设为主键,用autoincrement表示之列自增长的。
private val createBook = """
create table Book(
id integer primary key autoincrement,
author text,
price real,
pages integer,
name text)
""".trimIndent()
override fun onCreate(db: SQLiteDatabase)
{
// 创建表
db.execSQL(createBook)
Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show()
}
override fun onUpgrade(
db: SQLiteDatabase?,
oldVersion: Int,
newVersion: Int,
)
{
}
}
这里的创建代码为createBook字段。
使用插件 Database Navigator 查看
初始化方法:
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val myDatabaseHelper = MyDatabaseHelper(this, "BookStore.db", 1)
.apply {
// 也就是调用 getWritableDatabase()
// 首次创建后,再次运行不会重新创建
writableDatabase
}
}
}
升级数据库
onUpgrade()用于对数据库升级。 比如说,在原有的基础上增加一块表,是无法成功的(因为已经存在了),所以,可以如下所示:
class MyDatabaseHelper(val context: Context, name: String, version: Int) :
// context, 数据库名,自定义的Cursor,版本号
SQLiteOpenHelper(context, name, null, version)
{
// primary key 表示将 id 设为主键,用autoincrement表示之列自增长的。
private val createBook = """
create table Book(
id integer primary key autoincrement,
author text,
price real,
pages integer,
name text)
""".trimIndent()
private val createCategory = """
create table Category (
id integer primary key autoincrement,
category_name text,
category_code integer
)
""".trimIndent()
override fun onCreate(db: SQLiteDatabase)
{
// 创建表
db.execSQL(createBook)
db.execSQL(createCategory)
Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show()
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int)
{
// 如果存在表则删除
db.execSQL("drop table if exists Book")
db.execSQL("drop table if exists Category")
onCreate(db)
}
}
另外,还要记得对实例化处进行更新:
MyDatabaseHelper(this, "BookStore.db", 2)
增删查改
这部分篇幅较长,后续会更新,不会超过2022年8月27号
Copyright © 2022 日本世界杯_林高远世界杯 - edenyn.com All Rights Reserved.