Android笔记 (三)SQLite数据持久化存储

2025-11-06 00:26:16

Android笔记 (三)SQLite数据持久化存储

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.