In android I am trying to update a table in SQLite database, but I want to achieve, that it will update only empty columns or columns with NULL value.
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();
}
So if COL_10 is empty or has a NULL value, then I need to update it with a new value. Otherwise if there is already a value in COL_10, do nothing with that column. The same for COL11 and COL12.
I thought to add another conditions in this line, like:
db.update(TABLE_NAME, contentValues,COL_7 + " = '" + kateg + "' AND COL10!='' AND COL11!='' AND COL12!=''", null);db.close();
or even I wanted first to get the values from other query:
String Query2 = "SELECT * FROM "+ TABLE_NAME ";
Cursor cursor2 = db.rawQuery(Query2, null);
while (cursor2.moveToNext()) {
output_col10 = cursor2.getString(cursor2.getColumnIndexOrThrow(COL_10));
and then check if output_col10
is null or length>0, but this is an overkill I think.
Is there a possibility to do it simplier in my db.update function?
According to last answer I updated it :
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();
}
but for some reason the columns are still empty and not updated with any value.
You can update all the columns with a single UPDATE
statement and 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);