2012-03-17 45 views
2
工作

我已經在ContentProvider子類的Update方法如下代碼:SQL佔位符(「?」)不SQLiteDatabae.update

當我使用佔位符Where子句,我更新不工作(count等於0):

不起作用:

rowID = uri.getPathSegments().get(1); 
whereStr = "?=?"; 
count = db.update(PathSQLTable.TABLE_NAME, values, whereStr, new String[]{PathSQLTable.ID_KEY,rowID}); 

但是,如果我做手工的substituion,一切工作正常。

這工作:

rowID = uri.getPathSegments().get(1); 
whereStr = PathSQLTable.ID_KEY + "=" + rowID; 
count = db.update(PathSQLTable.TABLE_NAME, values, whereStr, null); 

我的問題是 - 是否有佔位符邏輯的錯誤(如this post建議)還是我做錯了什麼?

回答

3

它僅適用於sql查詢中的輸入參數,而不適用於列名稱。所以它應該工作,如果你試試這個:

rowID = uri.getPathSegments().get(1); 
whereStr = PathSQLTable.ID_KEY + " = ?"; 
count = db.update(PathSQLTable.TABLE_NAME, values, whereStr,new String[]{rowID}); 
+0

有趣。你碰巧知道在我的「不起作用」情況下作爲SQL查詢發送了什麼?沒有任何錯誤被android拋出,它只是返回零。 – CjS 2012-03-18 06:29:48

+0

我只知道列名不提供'?'。它與C#中的相同,例如'select * from city where city = @ City' ** ** City **通過'cmd.Parameters.AddWithValue(「@ City」,「Stockholm」);'提供。然而,在你的「不工作」查詢中,我認爲它翻譯'?',例如**'ID_KEY'= 6 **,所以ID_KEY被視爲字符串值,而不是列名,但它只是我的假設:) – waqaslam 2012-03-18 11:59:55

+0

好吧,這將解釋爲什麼它是一個有效的查詢返回零記錄。謝謝。 – CjS 2012-03-18 13:09:36