数据存储与访问之——初见SQLite数据库

SQLite 是一种轻量级、嵌入式关系型数据库,广泛用于移动应用和小型项目中,适合存储结构化数据。以下是对 SQLite 数据库的简介,涵盖核心概念、在 Android 中的使用方法及注意事项,保持简洁并附带代码示例。

1. 基本概念

  • 定义:SQLite 是一个无服务器、零配置、嵌入式的关系型数据库,数据存储在单一文件中。
  • 特点
  • 轻量:占用空间小,适合资源受限环境。
  • 支持 SQL:标准 SQL 语法,易于查询和操作。
  • 跨平台:支持 Android、iOS、桌面应用等。
  • 单文件存储:数据存于 .db 文件,易于管理。
  • 适用场景:本地数据存储,如用户数据、缓存、配置等。
  • 局限性:不支持高并发,适合单用户或低并发场景。

2. 在 Android 中使用 SQLite

以下以 Android(Java/Kotlin)为例,展示 SQLite 的基本操作。

创建数据库

Android 使用 SQLiteOpenHelper 管理数据库创建和升级。


import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, “MyDatabase.db”, null, 1) {
override fun onCreate(db: SQLiteDatabase) {
// 创建表
val createTable = “””
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
age INTEGER
)
“””
db.execSQL(createTable)
}

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    // 升级数据库
    db.execSQL("DROP TABLE IF EXISTS users")
    onCreate(db)
}

}

插入数据

val dbHelper = DatabaseHelper(context)
val db = dbHelper.writableDatabase
val values = ContentValues().apply {
    put("username", "Alice")
    put("age", 25)
}
db.insert("users", null, values)
db.close()

查询数据

val db = dbHelper.readableDatabase
val cursor = db.query("users", arrayOf("id", "username", "age"), 
    "username = ?", arrayOf("Alice"), null, null, null)
while (cursor.moveToNext()) {
    val id = cursor.getInt(0)
    val username = cursor.getString(1)
    val age = cursor.getInt(2)
    Log.d("SQLite", "ID: $id, Username: $username, Age: $age")
}
cursor.close()
db.close()

更新数据

val db = dbHelper.writableDatabase
val values = ContentValues().apply {
    put("age", 26)
}
db.update("users", values, "username = ?", arrayOf("Alice"))
db.close()

删除数据

val db = dbHelper.writableDatabase
db.delete("users", "username = ?", arrayOf("Alice"))
db.close()

3. 注意事项

  • 关闭资源:操作完成后关闭 SQLiteDatabaseCursor,避免内存泄漏。
  • 异常处理
  try {
      val db = dbHelper.writableDatabase
      db.insert("users", null, values)
  } catch (e: SQLiteException) {
      Log.e("SQLite", "Database error: ${e.message}")
  } finally {
      db.close()
  }
  • 性能优化
  • 使用事务(beginTransaction/endTransaction)批量操作。
  • 索引关键字段以加速查询。
  • 避免频繁打开/关闭数据库。
  • 线程安全:SQLite 默认非线程安全,建议在单线程或加锁访问。
  • 数据安全:敏感数据需加密,SQLite 本身存储明文。
  • 数据库升级:在 onUpgrade 中处理表结构变更,注意数据迁移。

4. 高级用法

  • 复杂查询:支持 JOIN、子查询、聚合函数等标准 SQL 操作。
  • 数据库备份:复制 .db 文件实现备份。
  • ORM 替代:Room 数据库(基于 SQLite)提供更现代的 API,支持 LiveData 和协程。

5. 实际应用

  • 本地缓存:如离线数据、新闻列表。
  • 用户数据:存储用户资料、偏好。
  • 复杂结构:如多表关联的订单系统。

6. 替代方案

  • Room:Android 推荐的 SQLite 封装,类型安全,支持异步。
  • SharedPreferences:适合少量键值对。
  • 文件存储:适合非结构化数据。

如果需要更详细的代码示例、Room 迁移方案或特定场景的 SQLite 实现,请告诉我!

文章已创建 2371

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部