首页 > 解决方案 > 在 Android 中更新 SQL 表中的单个值

问题描述

我正在尝试更新 1 个表中只有 1 行的 SQL .db 文件中的值。我只想更改 CUSTOMER_ISACTIVE 列。

    public static final String CUSTOMER_TABLE = "CUSTOMER_TABLE";
    public static final String COLUMN_CUSTOMER_EMAIL = "CUSTOMER_EMAIL";
    public static final String COLUMN_CUSTOMER_PASSWORD = "CUSTOMER_PASSWORD";
    public static final String COLUMN_CUSTOMRER_ISMEMBER = "CUSTOMRER_ISMEMBER";
    public static final String COLUMN_CUSTOMER_ISACTIVE = "CUSTOMER_ISACTIVE";
    public static final String COLUMN_CUSTOMER_PAYMENTERROR = "CUSTOMER_PAYMENTERROR";
    public static final String COLUMN_CUSTOMER_AUTOCARDTOKEN = "CUSTOMER_CARDTOKEN";

public void upDateActiveStatus(boolean isActive){
        SQLiteDatabase db = this.getWritableDatabase();
        String SS = "UPDATE " + CUSTOMER_TABLE + " SET " + COLUMN_CUSTOMER_ISACTIVE  + "=" + isActive + " WHERE " + "ID = 1";
        db.execSQL(SS);

但这不起作用。因为当我稍后拉取 isActive 的值时(我知道这部分有效)它是不变的。有任何想法吗?

这是我的错误: java.lang.RuntimeException: android.database.sqlite.SQLiteException: no such column: true (code 1 SQLITE_ERROR): , while compiling: UPDATE CUSTOMER_TABLE SET CUSTOMER_ISACTIVE = true

标签: javaandroidsqliteandroid-sqlite

解决方案


更新表的推荐方法是使用方法update()with ContentValues
该方法update()还返回您可以检查的受影响行数。
所以这样做:

public int upDateActiveStatus(boolean isActive){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COLUMN_CUSTOMER_ISACTIVE, isActive ? 1 : 0);
    int rows = db.update(CUSTOMER_TABLE, cv, "ID = ?", new String[] {"1"});
    db.close();
    return rows;
}

您可以像这样调用该方法:

int rows = upDateActiveStatus(true);

然后检查变量的值rows以检查更新的行数。


推荐阅读