import android.database.Cursor
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())
db.update("users", values, selection, selectionArgs)
db.close()
}
update():更新数据的方法。第一个参数是表名,第二个参数是更新的值,第三个参数是 WHERE 子句,第四个参数是 WHERE 子句的参数。
5. 删除数据
删除数据使用 SQLiteDatabase.delete() 方法。
1
2
3
4
5
6
7
8
9
10
fun deleteUser(context: Context, id: Long) {
val dbHelper = MyDatabaseHelper(context)
val db = dbHelper.writableDatabase
val selection = "id = ?"
val selectionArgs = arrayOf(id.toString())
db.delete("users", selection, selectionArgs)
db.close()
}
delete():删除数据的方法,类似于 update() 方法,传入 WHERE 子句来指定删除条件。
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)