關於Android SQLite持久化

關於Android SQLite持久化

https://github.com/OsbornWJ/AndroidSample 關乎基礎

1.SQLiteOpenHelper使用方法

2.關於SQLite的增刪查改

在項目中,經常需要用到本地化存儲,對數據進行持久化操作。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()))
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章