關於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()))
}