如何更新列只是在sqlite中为空?

时间:2016-09-20 06:32:11

标签: android sqlite

我使用以下查询来更新列。现在我想要的只是在它为空或空时才更新这些列。我怎样才能做到这一点?

 db.execSQL("UPDATE FieldTestDataTemp SET 
           Image1 = '" + f10.image1 + "', 
           Image2 = '" + f10.image2 + "', 
           Image3 = '" + f10.image3 + "', 
           Image4 = '" + f10.image4 + "', 
           Image5 = '" + f10.image5 + "',
           starRating = '" + starRating1 + "' ");

5 个答案:

答案 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, '') <> ''