关于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()))
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章