繁体   English   中英

Android SQLite 仅在 NULL 或为空时更新列

[英]Android SQLite update columns only if NULL or empty

在 android 我试图更新 SQLite 数据库中的表,但我想实现它只会更新空列或具有 NULL 值的列。

public void fillCal(String swin, String swout, String ripout, String kateg) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();

    contentValues.put(COL_10, swin);
    contentValues.put(COL_11, swout);
    contentValues.put(COL_12, ripout);

    db.update(TABLE_NAME, contentValues,COL_7 + " = '" + kateg + "'", null);db.close();
}

因此,如果 COL_10 为空或具有 NULL 值,那么我需要使用新值对其进行更新。 否则,如果 COL_10 中已有值,则对该列不执行任何操作。 COL11 和 COL12 相同。

我想在这一行中添加另一个条件,例如:

db.update(TABLE_NAME, contentValues,COL_7 + " = '" + kateg + "' AND COL10!='' AND COL11!='' AND COL12!=''", null);db.close();

甚至我想首先从其他查询中获取值:

 String Query2 = "SELECT * FROM "+ TABLE_NAME ";

        Cursor cursor2 = db.rawQuery(Query2, null);
        while (cursor2.moveToNext()) {
        output_col10 = cursor2.getString(cursor2.getColumnIndexOrThrow(COL_10));

然后检查output_col10是否为 null 或长度> 0,但我认为这是一种矫枉过正。

在我的 db.update function 中是否有可能更简单?

根据最后一个答案,我更新了它:

public void fillCal(String swin, String swout, String ripout, String kateg) {

        SQLiteDatabase db = this.getWritableDatabase();
        String Query = "UPDATE " + TABLE_NAME + " SET " + COL_10 + " = CASE WHEN " + COL_10 + " IS NULL OR " + COL_10 + " = '' THEN '" + swin + "' ELSE " + COL_10 + " END" + " where " + COL_7 + " = '" + kateg + "'";
        Cursor cursor = db.rawQuery(Query, null);
        cursor.close();
   
        String Query1 = "UPDATE " + TABLE_NAME + " SET " + COL_11 + " = CASE WHEN " + COL_11 + " IS NULL OR " + COL_11 + " = '' THEN '" + swout + "' ELSE " + COL_11 + " END" + " where " + COL_7 + " = '" + kateg + "'";
        Cursor cursor1 = db.rawQuery(Query1, null);
        cursor1.close();

        String Query2 = "UPDATE " + TABLE_NAME + " SET " + COL_12 + " = CASE WHEN " + COL_12 + " IS NULL OR " + COL_12 + " = '' THEN '" + ripout + "' ELSE " + COL_12 + " END" + " where " + COL_7 + " = '" + kateg + "'";
        Cursor cursor2 = db.rawQuery(Query2, null);

        cursor2.close();
        db.close();
    }

但由于某种原因,这些列仍然是空的,并且没有更新任何值。

如果要逐列IFNULL可以使用 IFNULL 执行此操作:

UPDATE table SET col1=IFNULL(col1, ‘somevalue’), col2=IFNULL(col2, ‘othervalue’)

如果 col1 是 null,这会将 col1 设置为“somevalue”,否则它将保持其当前值,并且对于 col2 相同,而不管彼此的 null state。

您可能需要添加 CASE/WHEN 语句以满足更新内部空字符串的要求,因此使用它可能更容易:

UPDATE table SET col1=CASE WHEN col1 IS NULL OR col1=‘’ THEN ‘somevalue’ ELSE col1 END

您可以使用单个UPDATE语句和execSQL()更新所有列:

String query = "UPDATE " + TABLE_NAME + " SET " + 
               COL_10 + " = CASE WHEN " + COL_10 + " IS NULL OR " + COL_10 + " = '' THEN '" + swout + "' ELSE " + COL_10 + " END," + 
               COL_11 + " = CASE WHEN " + COL_11 + " IS NULL OR " + COL_11 + " = '' THEN '" + swout + "' ELSE " + COL_11 + " END," + 
               COL_12 + " = CASE WHEN " + COL_12 + " IS NULL OR " + COL_12 + " = '' THEN '" + swout + "' ELSE " + COL_12 + " END "  + 
               "WHERE " + COL_7 + " = '" + kateg + "'";
db.execSQL(query);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM