Android 数据库 update 多行操作

在 Android 开发中,我们经常需要对数据库进行更新操作。而更新多行数据是常见的需求之一。本文将介绍如何在 Android 中使用 SQL 语句进行多行更新,并提供相应的代码示例。

1. 多行更新概述

在数据库中,更新操作用于修改已存在的行数据。通常,我们使用 UPDATE 语句来更新单行数据。但是,当我们需要同时更新多行数据时,使用 UPDATE 语句会比较麻烦。此时,可以通过使用 CASE WHEN 语句来实现多行更新。

2. 使用 CASE WHEN 语句更新多行数据

CASE WHEN 语句是一种条件语句,它允许我们根据特定条件执行不同的操作。在多行更新中,我们可以使用 CASE WHEN 语句根据满足特定条件的行来更新相应的数据。

下面是一个示例,假设我们有一个学生表,其中包含学生的姓名和年龄。我们想要将年龄大于 18 岁的学生的姓名都修改为 "成年人"。

首先,我们需要创建一个 SQLiteOpenHelper 的子类,用于创建和管理数据库。以下是一个简单的示例:

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, "students.db", null, 1) {
    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Alice', 20)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Bob', 17)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Charlie', 22)")
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        // 更新数据库版本时的操作
    }
}

接下来,我们需要在数据库中执行更新操作。我们可以使用 SQLiteDatabaseexecSQL 方法来执行 SQL 语句。以下是一个示例:

val db = DatabaseHelper(context).writableDatabase
val sql = "UPDATE students SET name = CASE WHEN age > 18 THEN '成年人' ELSE name END"
db.execSQL(sql)

在上面的示例中,我们使用 CASE WHEN 语句将年龄大于 18 岁的学生的姓名更新为 "成年人",其他学生的姓名保持不变。

3. 完整代码示例

下面是一个完整的代码示例,展示了如何使用 CASE WHEN 语句更新多行数据:

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, "students.db", null, 1) {
    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Alice', 20)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Bob', 17)")
        db.execSQL("INSERT INTO students (name, age) VALUES ('Charlie', 22)")
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        // 更新数据库版本时的操作
    }
}

fun updateStudents(context: Context) {
    val db = DatabaseHelper(context).writableDatabase
    val sql = "UPDATE students SET name = CASE WHEN age > 18 THEN '成年人' ELSE name END"
    db.execSQL(sql)
}

// 在合适的地方调用 updateStudents 方法即可执行更新操作

4. 甘特图

下面是一个使用 mermaid 语法绘制的甘特图,展示了多行更新的过程:

gantt
    dateFormat  YYYY-MM-DD
    title 多行更新甘特图

    section 数据库更新
    创建表格  : 2022-01-01, 2d
    插入数据  : 2022-01-02, 1d
    更新数据  : 2022-01-03, 1d

5. 总结

通过使用 CASE WHEN 语句,我们可以在 Android 数据库中实现多行更新操作。在实际开发中,我们可以根据不同的需求,使用不同的条件来更新数据。希望本文对你理解如何在 Android 中进行多行数据更新提供