2014-04-30 27 views
0

有沒有辦法使用ContentProvider執行以下查詢?ContentProvider更新

UPDATE TableName 
SET ColumnName=ColumnName + 1 
WHERE id=1 

我知道我可以執行這個作爲rawQuery,但我想知道有多少行受到影響。此外,execSQL方法說:

它沒有辦法返回任何數據(如受影響的行數)。相反,鼓勵在可能的情況下使用insert(String,String,ContentValues),update(String,ContentValues,String,String [])等。

但是,我找不到任何方法來使用我的ContentProvider的更新方法來做到這一點。

+0

使用update()更新 – pskink

+0

我知道如何通過替換它們來更新值,但我不知道如何對它們做一些操作,如增量 – Steel

回答

3

你可以試試這個:

SQLiteDatabase db = ...; // get your database 
String sql = "UPDATE tableName SET columnName = columnName + 1 WHERE id = 1"; 
SQLiteStatement statement = db.compileStatement(sql); 
int affected = statement.executeUpdateDelete(); 
statement.close(); 

(編輯開始)

你可以定義一個URI傳遞給update時會忽略ContentValues參數,並執行上面的代碼。

(編輯完)

我能想到的唯一的其他方式,通過ContentProvider的做這將是實現您的ContentProvider的call方法和重定向到基於什麼得到傳入的另一種方法。然後你會使用ContentResolver.call(...)並給它一個包含必要信息的包。

+0

非常好的答案。我確信它會做這些技巧,但不幸的是,這次調用需要API級別11,我希望我的應用能夠在較低版本上運行。無論如何感謝您 – Steel

+0

爲什麼需要在較低版本上運行?薑餅和以下代表不到20%的設備,這個數字正在減少。 – Karakuri

+0

在附註上,您也可以在光標中傳遞此信息。帶有MatrixCursor的Ether,它通過使用'getExtras'和'setExtras'方法來保存結果或默認光標。 – GPuschka