我使用以下查询来更新列。现在我想要的只是在它为空或空时才更新这些列。我怎样才能做到这一点?
db.execSQL("UPDATE FieldTestDataTemp SET
Image1 = '" + f10.image1 + "',
Image2 = '" + f10.image2 + "',
Image3 = '" + f10.image3 + "',
Image4 = '" + f10.image4 + "',
Image5 = '" + f10.image5 + "',
starRating = '" + starRating1 + "' ");
答案 0 :(得分:1)
您可以将这样的参数传递给一个常用方法,该方法将返回更新的记录数
public int updateRecords(String table, ContentValues values,
String whereClause, String[] whereArgs) {
int a = db.update(table, values, whereClause, whereArgs);
return a;
}
并且在此db中是SQLiteDatabase对象
private SQLiteDatabase db;
答案 1 :(得分:1)
在mysql中我们曾经使用过这个查询
UPDATE table
SET field = 'Your value'
WHERE field
IS NULL
OR LENGTH(field)=0
您必须设置多个查询才能设置多列条件。
答案 2 :(得分:0)
根据OP评论
我想检查以上查询中的每一列。
如果我理解正确,您只想在此列为空时更新每个列。为此,您需要为每列运行单独的查询。
答案 3 :(得分:0)
Sqlite有coalesce函数,它接受可变数量的参数并首先返回非空。
UPDATE field UPDATE FieldTestDataTemp SET Image1 = coalesce(Image1, f10.image1)...
然而 - 这不包括空字段的情况所以你需要携带它们(例如设置为null)。
使用prepareStatement()
/ exec()
代替execSQL()
也是个好主意。它允许使用占位符而不是字符串连接。
答案 4 :(得分:0)
你可以做一个UPDATE
并检查null / empty:
UPDATE FieldTestDataTemp
SET Image1 = CASE WHEN Image1 IS NULL OR Image1 = ''
THEN f10.image1
ELSE Image1
END,
Image2 = CASE WHEN Image1 IS NULL OR Image2 = ''
THEN f10.image2
ELSE Image2,
...
但是这将更新 UPDATE
语句中的每个列,即使基本64图像字符串已经不为空且不为空。
处理此问题的一种可能更简洁的方法是分别更新每个列。在这种情况下,我们只需添加一个WHERE
子句来仅更新空/空图像字符串:
UPDATE FieldTestDataTemp
SET Image1 = f10.image1
WHERE COALESCE(Image1, '') <> ''