如何在sqlite中更新表时使用whereClause,whereArgs?

时间:2012-03-09 09:48:34

标签: android sqlite

在我的Android应用程序中,我尝试使用

更新表
  

sqliteDatabase.updateWithOnConflict(table,values,whereClause,whereClause,conflictAlgorithm)

方法,但我不清楚whereClause和whereClause变量。以下代码不会给出任何异常或错误,但表格不会更新。

AndroidOpenDbHelper androidOpenDbHelper = new AndroidOpenDbHelper(CreateListsActivity.this);
                                    SQLiteDatabase sqliteDatabase = androidOpenDbHelper.getWritableDatabase();
                                    ContentValues values = new ContentValues();

                                    values.put(AndroidOpenDbHelper.LIST_NAME, editedKeyword);

                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_LISTS, values, AndroidOpenDbHelper.LIST_NAME + "=" + id,null, SQLiteDatabase.CONFLICT_IGNORE);
                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_KEYWORDS, values, AndroidOpenDbHelper.LIST_NAME + "=" + id, null, SQLiteDatabase.CONFLICT_IGNORE);
                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_TWEET, values, AndroidOpenDbHelper.LIST_NAME + "=" + id, null, SQLiteDatabase.CONFLICT_IGNORE);

                                    sqliteDatabase.close(); 

任何建议??

2 个答案:

答案 0 :(得分:1)

您的冲突算法是IGNORE - “发生约束冲突时,不会插入或更改包含约束违规的一行”

AndroidOpenDbHelper.LIST_NAME是否对您有违反的唯一约束?尝试FAIL并检查返回码: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#CONFLICT_FAIL

另外,绑定语句中的参数。这是使用where子句和args的正确方法 -

sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_KEYWORDS, values, AndroidOpenDbHelper.LIST_NAME + "= ?" , new String[]{id}, SQLiteDatabase.CONFLICT_IGNORE);

答案 1 :(得分:-3)

您可以编写自己的sql update语句,如下所示:

String sql="update <tableName> set <columnName> = 'newValue' where <columnName>= 'oldValue' ";
sqliteDatabase.execSql(sql,null);