class MyDatabaseHelper(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" // 表名称 }
override fun onCreate(db: SQLiteDatabase) { // 创建数据库表 val createTableQuery = """ CREATE TABLE $TABLE_NAME ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER ) """.trimIndent() db.execSQL(createTableQuery) }
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { // 如果数据库版本变化时,删除旧表并创建新表 db.execSQL("DROP TABLE IF EXISTS $TABLE_NAME") onCreate(db) } }
onCreate:当数据库首次创建时执行。通常在这里创建表和初始化数据。
onUpgrade:当数据库版本发生变化时执行。你可以在这里进行表的迁移或删除。
2. 插入数据
插入数据需要通过 SQLiteDatabase.insert() 方法来实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
import android.content.ContentValues
fun insertUser(context: Context, name: String, age: Int) { val dbHelper = MyDatabaseHelper(context) val db = dbHelper.writableDatabase
val values = ContentValues().apply { put("name", name) put("age", age) }
db.insert("users", null, values) db.close() }
ContentValues:是用于存储要插入的数据的容器。通过 put 方法将列名和值添加到 ContentValues 中。
fun queryUsers(context: Context): List<User> { val dbHelper = MyDatabaseHelper(context) val db = dbHelper.readableDatabase
val cursor: Cursor = db.query( "users", // 表名 arrayOf("id", "name", "age"), // 列名 null, // WHERE 子句 null, // WHERE 子句的参数 null, // GROUP BY 子句 null, // HAVING 子句 null // ORDER BY 子句 )
val users = mutableListOf<User>()
while (cursor.moveToNext()) { val id = cursor.getLong(cursor.getColumnIndexOrThrow("id")) val name = cursor.getString(cursor.getColumnIndexOrThrow("name")) val age = cursor.getInt(cursor.getColumnIndexOrThrow("age"))
users.add(User(id, name, age)) }
cursor.close() db.close()
return users }
data class User(val id: Long, val name: String, val age: Int)
fun queryUsersRaw(context: Context): List<User> { val dbHelper = MyDatabaseHelper(context) val db = dbHelper.readableDatabase
val cursor: Cursor = db.rawQuery("SELECT * FROM users", null)
val users = mutableListOf<User>()
while (cursor.moveToNext()) { val id = cursor.getLong(cursor.getColumnIndex("id")) val name = cursor.getString(cursor.getColumnIndex("name")) val age = cursor.getInt(cursor.getColumnIndex("age"))
users.add(User(id, name, age)) }
cursor.close() db.close()
return users }
rawQuery():执行原始的 SQL 查询语句,返回一个 Cursor。
4. 更新数据
更新数据使用 SQLiteDatabase.update() 方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import android.content.ContentValues
fun updateUser(context: Context, id: Long, name: String, age: Int) { val dbHelper = MyDatabaseHelper(context) val db = dbHelper.writableDatabase
val values = ContentValues().apply { put("name", name) put("age", age) }
val selection = "id = ?" val selectionArgs = arrayOf(id.toString())
class MyDatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
companion object { const val DATABASE_NAME = "my_database.db" const val DATABASE_VERSION = 1 const val TABLE_NAME = "users" const val COLUMN_ID = "id" const val COLUMN_NAME = "name" const val COLUMN_EMAIL = "email" }
override fun onCreate(db: SQLiteDatabase?) { val createTableQuery = """ CREATE TABLE $TABLE_NAME ( $COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COLUMN_NAME TEXT, $COLUMN_EMAIL TEXT ) """ db?.execSQL(createTableQuery) }
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { db?.execSQL("DROP TABLE IF EXISTS $TABLE_NAME") onCreate(db) } }
2. 插入数据
1 2 3 4 5 6 7
val dbHelper = MyDatabaseHelper(context) val db = dbHelper.writableDatabase val values = ContentValues().apply { put(MyDatabaseHelper.COLUMN_NAME, "John Doe") put(MyDatabaseHelper.COLUMN_EMAIL, "john.doe@example.com") } db.insert(MyDatabaseHelper.TABLE_NAME, null, values)
3. 查询数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
val db = dbHelper.readableDatabase val cursor = db.query( MyDatabaseHelper.TABLE_NAME, arrayOf(MyDatabaseHelper.COLUMN_ID, MyDatabaseHelper.COLUMN_NAME, MyDatabaseHelper.COLUMN_EMAIL), null, null, null, null, null )
while (cursor.moveToNext()) { val id = cursor.getLong(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_ID)) val name = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_NAME)) val email = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_EMAIL)) println("User: $id, $name, $email") } cursor.close()
4. 更新数据
1 2 3 4 5 6 7 8
val values = ContentValues().apply { put(MyDatabaseHelper.COLUMN_NAME, "John Smith") } val selection = "${MyDatabaseHelper.COLUMN_ID} = ?" val selectionArgs = arrayOf("1")
val db = dbHelper.writableDatabase db.update(MyDatabaseHelper.TABLE_NAME, values, selection, selectionArgs)
5. 删除数据
1 2 3 4 5
val selection = "${MyDatabaseHelper.COLUMN_ID} = ?" val selectionArgs = arrayOf("1")
val db = dbHelper.writableDatabase db.delete(MyDatabaseHelper.TABLE_NAME, selection, selectionArgs)