2011-11-25 56 views
1

我想更新android的callog.calls表的cached_name列,但得到sql lite異常。我一直試圖這個很長,但無法拿出任何東西。我搜索了很多,但找不到足夠的有關更新的信息。如何在android中使用更新查詢?

ContentResolver cr = getContentResolver(); 

      Cursor cur = cr.query(CallLog.Calls.CONTENT_URI, 
       null, null, null, null); 
ContentValues value=new ContentValues(); 
value.put("CallLog.Calls.CACHED_NAME","frank"); 
    cr.update(CallLog.Calls.CONTENT_URI,value,CallLog.Calls.CACHED_NAME, null); 

Error: 

11-25 20:11:17.755: ERROR/Database(106): Error updating CallLog.Calls.CACHED_NAME=frank using UPDATE calls SET CallLog.Calls.CACHED_NAME=? WHERE name 

11-25 20:11:17.776: ERROR/DatabaseUtils(106): Writing exception to parcel 

11-25 20:11:17.776: ERROR/DatabaseUtils(106): android.database.sqlite.SQLiteException: near ".": syntax error: , while compiling: UPDATE calls SET CallLog.Calls.CACHED_NAME=? WHERE name 

回答

0

您調用更新的語法是錯誤的。它需要看起來像這樣:

cr.update(CallLog.Calls.CONTENT_URI,value,null, null); 

將更新表中的所有值。要更新特定行,請執行以下操作:

cr.update(CallLog.Calls.CONTENT_URI,value,CallLog.Calls.CACHED_NAME +" = ?", new String[]{oldName}); 

其中,oldName是要在WHERE子句中使用的值。

+0

cr.update(CallLog.Calls.CONTENT_URI,值,CallLog.Calls.CACHED_NAME + 「=?」,新的String [] { 「」}); ...我用這個名字最初是空的,但現在既沒有例外,也沒有在db.any的想法中獲得更新。 –

+0

,它將更新CACHED_NAME列等於空字符串''(不是空字符串,而是0字符字符串)的任何行。你的桌子上有這麼一排嗎? – Chris