关于Android SQLite持久化
https://github.com/OsbornWJ/AndroidSample 关乎基础
在项目中,经常需要用到本地化存储,对数据进行持久化操作。Android引入SQLite轻量级数据库,方便开发者在数据量大的时候进行持久化操作。
存储类 | **描述 ** |
---|---|
NULL | 值是一个 NULL 值。 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
1.SQLiteOpenHelper使用方法
SQLiteOpenHelper为Android提供的SQLite抽象的辅助类,玩家需要继承自该类,实现onCreate和onUpgrade方法。
/**
* Sqlite帮助类
*/
class SQLiteHelper(context: Context?) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
// 源码中:当玩家获取write数据库对象时,会执行该方法创建数据表(数据库也是在获取write才开始创建)
override fun onCreate(db: SQLiteDatabase) {
createAllTable(db, false)
}
// 当数据库版本发生变化时调用
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
dropAllTable(db, true)
createAllTable(db, false)
}
private fun createAllTable(db: SQLiteDatabase, ifExists: Boolean) {
UserTable.createTable(db, ifExists)
}
private fun dropAllTable(db: SQLiteDatabase, ifExists: Boolean) {
UserTable.dropTable(db, ifExists)
}
companion object {
private const val DATABASE_NAME = "sample_db"
private const val DATABASE_VERSION = 1
}
}
/**
* UserTable 类
*/
class UserTable(var dataBase: SQLiteDatabase) : AbstractTable() {
companion object {
private const val TABLE_NAME = "userTable"
fun createTable(dataBase: SQLiteDatabase, ifExists: Boolean) {
val sql = "create table" + (if (ifExists) "IF EXISTS " else "") +
"$TABLE_NAME(Id Integer primary key autoincrement, UserName text, Account text, Password text)"
dataBase.execSQL(sql)
}
fun dropTable(dataBase: SQLiteDatabase, ifExists: Boolean) {
val sql = "DROP TABLE " + (if (ifExists) "IF EXISTS " else "") + TABLE_NAME
dataBase.execSQL(sql)
}
}
}
2.关于SQLite的增删查改
以下为提供的Api方法,还有执行Sql语句方法,这里不讲述
- 新增数据
/**
* 参数:表名
* 如果在contentValues中该值为空,要显示的表明出来
* contentValues 新增的数据库字段
*/
fun insert(userName: String, passWord: String) {
val contentValues = ContentValues()
contentValues.put("UserName", userName)
contentValues.put("Password", passWord)
dataBase.insert(TABLE_NAME, null, contentValues)
}
- 删除数据
/**
* 参数:表名
* where 条件(多个条件and拼接)?占位符
* where 条件赋值,对应?
*/
fun deleteUser(userName: String) {
dataBase.delete(TABLE_NAME, "UserName = ?", arrayOf(userName))
}
- 查找数据
/**
*参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询限制
*/
fun queryAll(): MutableList<User> {
val users = mutableListOf<User>()
val cursor = dataBase.query(TABLE_NAME, arrayOf("Id", "UserName", "Password"), null, null, null, null, null)
while (cursor.moveToNext()) {
users.add(User(cursor.getInt(cursor.getColumnIndex("Id")),
cursor.getString(cursor.getColumnIndex("UserName")), cursor.getString(cursor.getColumnIndex("Password"))))
}
cursor.close()
return users
}
- 修改数据
/**
* 参数:表名
* contentValues修改值
* where 条件(多个条件and拼接)?占位符
* where 条件赋值,对应?
*/
fun updateUser(user: User) {
val contentValues = ContentValues()
contentValues.put("UserName", user.name)
contentValues.put("Password", user.password)
dataBase.update(TABLE_NAME, contentValues, "Id = ?", arrayOf(user.id.toString()))
}