[英]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.