2014-02-18 146 views
0

是否需要在Android中爲SQLite轉義條款?Android SQLite轉義在哪裏條款

ContentValues vals= new ContentValues(); 
vals.put(KEY, val); 

String where = DatabaseUtils.sqlEscapeString(val); 

db.update(TABLE_NAME, vals, KEY + "='" + where + "'", null); 

由於某種原因,如果我做db.update(TABLE_NAME, vals, KEY + "=?", new String[] {where});它不起作用。

編輯:我的問題是我是否需要逃避whereDatabaseUtils.sqlEscapeString或者如果update方法(或任何其他的SQLite方法)將逃脫對我來說。

+0

任何你插入到一個SQL字符串需要被轉義,如果它可能包含sql元字符。例如考慮'WHERE key ='Miles O'Brien''。 –

+0

我想我的問題更多,如果'update'方法爲你逃脫它。 – Eliezer

回答

0

update() method需要第三個參數插槽中的SQL WHERE子句,而不是轉義的參數值。它期望插入WHERE子句的值的數組,而不是單詞「where」。

這裏是方法的簽名:

public int update (
    String table, ContentValues values, String whereClause, String[] whereArgs) 
+0

'where'只是變量名稱。它被設置爲'DatabseUtils.sqlEscapeString(val)'並且包含SQL轉義的val。 – Eliezer

+0

那麼也許你應該對你所得到的錯誤信息更加具體。 –

+0

就使用String []而言,將整個where子句放入'whereClause'的方面來說,當我使用String []時,我沒有得到實際的錯誤;它只是沒有找到我的行,肯定符合where子句的條件,而用'whereClause'參數將整個子句傳遞給查找行。 – Eliezer

0

假設在sqllite更新方式。

ContentValues vals= new ContentValues(); 
vals.put(KEY, val); 
db.update(TABLE_NAME, vals, KEY + " = ?",new String[] {String.valueOf(DatabaseUtils.sqlEscapeString(val)) });