Android 中 SQLite 使用及特点
SQLite 简介
SQLite 是一个软件库,实现了关系数据库管理系统的功能。SQLite 的特点是轻量级的、无需独立的服务器进程和系统,以及易于理解和使用。在 Android 中,SQLite 是默认的数据库,用于本地存储数据。
SQLite 使用步骤
1. 导入库依赖
在 Android 项目中,需要在 app/build.gradle
文件中添加以下依赖:
implementation 'androidx.sqlite:sqlite:2.1.0'
2. 创建数据库和数据表
在 Android 中,可以通过继承 SQLiteOpenHelper
类来创建数据库和表。下面是一个创建名为 "users" 的表的示例:
class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
companion object {
private const val DATABASE_NAME = "my_database.db"
private const val DATABASE_VERSION = 1
private const val TABLE_NAME = "users"
private const val COLUMN_ID = "_id"
private const val COLUMN_NAME = "name"
private const val COLUMN_AGE = "age"
}
override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE_QUERY = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $COLUMN_NAME TEXT, $COLUMN_AGE INTEGER)"
db?.execSQL(CREATE_TABLE_QUERY)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val DROP_TABLE_QUERY = "DROP TABLE IF EXISTS $TABLE_NAME"
db?.execSQL(DROP_TABLE_QUERY)
onCreate(db)
}
}
需要注意的是,在 onCreate
方法中,需要执行一个实际的 SQL 查询来创建该表格。
3. 插入数据
可以使用 ContentValues
对象来插入数据。示例代码如下:
val db = dbHelper.writableDatabase
val values = ContentValues().apply {
put(DBHelper.COLUMN_NAME, "John")
put(DBHelper.COLUMN_AGE, 25)
}
val rowId = db.insert(DBHelper.TABLE_NAME, null, values)
4. 查询数据
查询数据可以通过 query
或 rawQuery
方法来实现。查询并获取结果的代码如下:
val db = dbHelper.readableDatabase
val cursor = db.query(DBHelper.TABLE_NAME, null, null, null, null, null, null)
with(cursor) {
while (moveToNext()) {
val id = getLong(getColumnIndexOrThrow(DBHelper.COLUMN_ID))
val name = getString(getColumnIndexOrThrow(DBHelper.COLUMN_NAME))
val age = getInt(getColumnIndexOrThrow(DBHelper.COLUMN_AGE))
// 对获取的数据进行处理
}
}
cursor.close()
5. 更新和删除数据
更新和删除数据可以通过 update
和 delete
方法来实现。示例代码如下:
更新数据:
val db = dbHelper.writableDatabase
val values = ContentValues().apply {
put(DBHelper.COLUMN_NAME, "Peter")
put(DBHelper.COLUMN_AGE, 28)
}
db.update(DBHelper.TABLE_NAME, values, "$DBHelper.COLUMN_ID = ?", arrayOf(rowId.toString()))
删除数据:
val db = dbHelper.writableDatabase
db.delete(DBHelper.TABLE_NAME, "$DBHelper.COLUMN_ID = ?", arrayOf(rowId.toString()))
SQLite 特点
-
轻量级: SQLite 的代码库非常简单,易于部署和管理,不需要复杂的安装过程。
-
无需独立的服务器进程和系统:SQLite 以单个文件的形式存储数据库,因此无需运行独立的服务器进程和系统,从而减少了系统开销,加快了数据访问速度。
-
无需特别的管理:SQLite 能够自动管理锁,并且可以通过简单的 SQL 语句进行数据操作,因此无需进行额外的管理。
-
易于理解和使用:SQLite 使用标准的 SQL 语言进行数据库管理和操作,可读性强,易于理解和使用。
示例
下面是一个使用 SQLite 存储学生信息的示例:
class Student(val id: Int, val name: String, val age: Int)
class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
companion object {
private const val DATABASE_NAME = "my_database.db"
private const val DATABASE_VERSION = 1
private const val TABLE_NAME = "students"
private const val COLUMN_ID = "_id"
private const val COLUMN_NAME = "name"
private const val COLUMN_AGE = "age"
}
override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE_QUERY = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $COLUMN_NAME TEXT, $COLUMN_AGE INTEGER)"
db?.execSQL(CREATE_TABLE_QUERY)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val DROP_TABLE_QUERY = "DROP TABLE IF EXISTS $TABLE_NAME"
db?.execSQL(DROP_TABLE_QUERY)
onCreate(db)
}
fun addStudent(student: Student) {
val db = writableDatabase
val values = ContentValues().apply {
put(COLUMN_ID, student.id)
put(COLUMN_NAME, student.name)
put(COLUMN_AGE, student.age)
}
db.insert(TABLE_NAME, null, values)
}
fun getStudentById(id: Int): Student? {
val db = readableDatabase
val cursor = db.rawQuery("SELECT * FROM $TABLE_NAME WHERE $COLUMN_ID = ?", arrayOf(id.toString()))
return if (cursor.moveToFirst()) {
val name = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME))
val age = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_AGE))
Student(id, name, age)
} else {
null
}
}
fun getAllStudents(): List<Student> {
val students = mutableListOf<Student>()
val db = readableDatabase
val cursor = db.rawQuery("SELECT * FROM $TABLE_NAME", null)
with(cursor) {
while (moveToNext()) {
val id = getInt(getColumnIndexOrThrow(COLUMN_ID))
val name = getString(getColumnIndexOrThrow(COLUMN_NAME))
val age = getInt(getColumnIndexOrThrow(COLUMN_AGE))
students.add(Student(id, name, age))
}
}
cursor.close()
return students
}
fun deleteStudentById(id: Int) {
val db = writableDatabase
db.delete(TABLE_NAME, "$COLUMN_ID = ?", arrayOf(id.toString()))
}
fun updateStudent(student: Student) {
val db = writableDatabase
val values = ContentValues().apply {
put(COLUMN_NAME, student.name)
put(COLUMN_AGE, student.age)
}
db.update(TABLE_NAME, values, "$COLUMN_ID = ?", arrayOf(student.id.toString()))
}
}
以上示例演示了如何使用 SQLite 存储和获取学生的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中SQLite使用及特点 - Python技术站