2014-03-30 98 views
0

有沒有辦法讓最後的更新行ID,因爲我們可以從插入操作?獲取最近更新的行ID

Get generated id after insert

int row_id = -1 

// fx_watchlist_id is having constraint unique (fx_watchlist_id) on conflict. 
// So, we are pretty sure maximum updated row will be 1 
int count = database.update(TABLE_TIMESTAMP, values, "fx_watchlist_id = ?", new String[]{Long.toString(fxWatchlistId)}); 
if (count <= 0) { 
    row_id = database.insert(TABLE_TIMESTAMP, null, values); 
} else { 
    // Is there a way to retrieve last updated row id, without perform select? 
    row_id = ... 
} 

return row_id; 

回答

1

insert功能,因爲沒有確定哪些是由數據庫自動生成值沒有其他辦法返回ROWID。

更新沒有這個問題; whereClause參數的值已經足以查找記錄。此外,更新可能會影響多於或少於一條記錄,因此不可能有單個返回值;你需要某種形式的列表,瞭解的,所以你也可以同樣使用Cursor

Cursor c = database.query(TABLE_TIMESTAMP, new String[] { "rowid" }, 
          "fx_watchlist_id = " + fxWatchlistId, null, 
          null, null, null); 
if (c.moveToFirst()) { 
    row_id = c.getLong(0); 
    database.update(TABLE_TIMESTAMP, values, 
        "rowid = " + row_id, null); 
} else { 
    row_id = database.insert(...); 
} 
+0

這裏的關鍵,如果使用這種方法,是-即將被更新的行*前查詢*因爲'update'操作可能會很好地改變'where'約束中字段的值,所以執行實際更新'更新myTable SET col1 = 2 WHERE col1 = 1'。在更新之後,查詢原始的where子句('col1 = 1')*在這種情況下將返回一個空遊標。 – dbm