2016-09-20 4 views
1

Я использую ниже запрос для обновления столбца. Теперь я хочу, чтобы я хотел обновлять эти столбцы только тогда, когда он пуст или равен нулю. Как я могу это достичь?Как обновить столбец только пустым в sqlite?

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

вы должны знать сначала, что поля имеет нулевое значение –

+0

я обновил свой запрос. Я хочу проверить это для каждого столбца выше запроса. –

+0

Я не думаю, что вы можете реализовать свою логику в одном утверждении 'UPDATE'. Один оператор будет либо обновлять все столбцы, либо ни один из них. –

ответ

1

В MySQL мы используемый для использования этого запроса

UPDATE table 
SET field = 'Your value' 
WHERE field 
IS NULL 
OR LENGTH(field)=0 

Вы должны установить несколько запросов для установки нескольких условий столбца.

1

Вы можете передать параметры, как это общий метод, который вернет вам количество записей обновленных

public int updateRecords(String table, ContentValues values, 
          String whereClause, String[] whereArgs) { 
     int a = db.update(table, values, whereClause, whereArgs); 
     return a; 
    } 

и в этой БД SQLiteDatabase объекта

private SQLiteDatabase db; 
0

Согласно ОП комментарий

Я хочу, чтобы проверить это для каждого столбца в приведенном выше запросе.

Если вы правильно поняли, что хотите обновить каждый столбец, только если этот столбец пуст. Для этого вам нужно запустить отдельный запрос для каждого столбца.

0

Sqlite имеет функцию coalesce, которая принимает переменное количество параметров и возвращает сначала не null.

UPDATE field UPDATE FieldTestDataTemp SET Image1 = coalesce(Image1, f10.image1)... 

Однако это не охватывает ситуацию с пустыми полями, поэтому вам нужно носить с собой (например, значение null).

Также рекомендуется использовать prepareStatement()/exec() вместо execSQL(). Он позволяет использовать заполнители вместо конкатенации строк.

0

You может сделать один UPDATE, а также проверить нулевой/пустой:

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 уже не null и не пусто.

Возможно, более чистым способом обработки этого является обновление каждого столбца отдельно. В этом случае мы можем просто добавить предложение WHERE только обновление для пустых/пустых строк изображения:

UPDATE FieldTestDataTemp 
SET Image1 = f10.image1 
WHERE COALESCE(Image1, '') <> '' 
Смежные вопросы