2012-03-09 50 views
0

在我的Android應用程序,我嘗試更新使用如何使用whereClause,whereArgs在sqlite中更新表時?

sqliteDatabase.updateWithOnConflict

方法的表(表中的數值,whereClause,whereClause,conflictAlgorithm),但我對whereClause並沒有明確的想法whereClause variables.following code will not give any exception or error but the table will not be updated。

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(); 

有什麼建議?

回答

1

您的衝突算法忽略 - 「當限制衝突發生時,包含限制衝突的一行沒有被插入或更改」

確實AndroidOpenDbHelper.LIST_NAME有它獨特的約束,你可能違反?嘗試失敗並檢查返回碼: 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); 
+0

我的身份證是長期價值,我必須將它轉換爲字符串把作爲新的String [] {id}。可以嗎? – 2012-03-09 10:26:09

+0

String.valueOf(yourlongId)會更好。 – Anirudh 2012-03-09 11:43:44

-3

您可以編寫自己的SQL UPDATE語句是這樣的:

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