2016-02-22 16 views
0

我有以下查詢返回單個元素(最多):如何更新我在android中有遊標的條目?

Cursor cursor = db.query(
      DATABASE_TABLE_SERIES, 
      new String[]{KEY_PRICE}, 
      KEY_BOOK + " = ?", 
      new String[]{String.valueOf(bookId)}, 
      null, 
      null, 
      KEY_DATE+" ASC", 
      "1" 
    ); 

我可能需要更新數據庫中的這個特殊的單個條目。這是我嘗試:

ContentValues changedValues = new ContentValues(); 
changedValues.put(KEY_PRICE, changedPrice); 
db.update(
    DATABASE_TABLE_SERIES, 
    changedValues, 
    "KEY_BOOK = ? ORDERBY "+ KEYDATE +" ASC LIMIT 1", 
    new String[]{String.valueOf(bookId)} 
); 

這不起作用(如我所料)。

如何更新查詢結果中的確切條目?我強烈希望一些示例代碼,因爲我可能不會理解文本形式的解釋(我是一名android初學者)!

+0

刪除'Update()'函數中的'OrderBy ...'。它不屬於那裏。 –

+0

這並不回答我的問題...... – Alex

+0

好吧,您還需要進行交易(並提交它)才能更改爲「粘貼」。這是你的問題嗎? –

回答

0

要更新此單個條目,必須創建一個唯一標識符。每個表中的唯一標識符是id。所以首先必須有select這個唯一的標識符,然後其餘的很容易。下面是示例代碼:

Cursor cursor = db.query(
     DATABASE_TABLE_SERIES, 
     new String[]{'id'}, 
     KEY_BOOK + " = ?", 
     new String[]{String.valueOf(bookId)}, 
     null, 
     null, 
     KEY_DATE+" ASC", 
     "1" 
); 
cursor.moveToFirst(); 

ContentValues changedValues = new ContentValues(); 
changedValues.put(KEY_PRICE, changedPrice); 
db.update(
    DATABASE_TABLE_SERIES, 
    changedValues, 
    "id = ?", 
    new String[]{cursor.getString(0)} 
); 

當然,一個可以修改查詢這兩個第一次請求,price和一氣呵成id,如果是合適的。

0

替換:

"KEY_BOOK = ? ORDERBY "+ KEYDATE +" ASC LIMIT 1", 

有:

"KEY_BOOK = ?", 

上有an UPDATE statement沒有ORDER BY條款或LIMIT條款。

+0

但是,然後我有多個可能的條目?我有數百個查詢「KEY_BOOK = 3」匹配的條目。他們全部被更新了嗎?這不是我想要的...... – Alex

+0

@Alex:「但是我有多個可能的條目?」 - 然後用一些唯一標識符替換「KEY_BOOK」和值。我們不知道你的數據庫模式;我曾假設'KEY_BOOK'實際上是一個主鍵。 – CommonsWare

+0

不明白我的意思,是的,你是對的... – Alex

相關問題