2013-03-06 21 views
0

這是我用什麼插入:的Android SqlLite更新最後插入的行

public long insert(String content, Date startAt, Date endAt) { 
     if (content == null || startAt == null) { 
      return 0; 
     } 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(KEY_CONTENT, content); 
     contentValues.put(KEY_START_AT, startAt.getTime()); 
     if (endAt == null) { 
      contentValues.putNull(KEY_END_AT); 
     } else { 
      contentValues.put(KEY_END_AT, endAt.getTime()); 
     } 

     return sqLiteDatabase.insert(TABLE_NAME, null, contentValues); 
    } 

現在我想創建一個將更新最後插入的行更新的方法。我怎樣才能得到最後插入的行?

+0

這裏有一個類似的問題另一個問題:http://stackoverflow.com/questions/7575166/android-sqlite-get-last-insert-row-id – staaar 2013-03-06 12:49:54

+0

http://stackoverflow.com/questions/7575166/android-sqlite-get-last-insert-row-id 請參閱此鏈接獲取上次插入的行 – Nirmal 2013-03-06 13:07:07

回答

1

如果你有一個id屬性,它作爲一個主鍵,你可以做一個原始數據庫查詢在SqlLite上。

Cursor cc = this.mDb.rawQuery("SELECT *" + " FROM " + "<Your DATABASE_NAME> " + 
"ORDER BY id " + "DESC LIMIT 1", null); 
return cc; 

這裏, 1.它返回一個指針。 2. mDb是一個SQLiteDatabase類實例。 3. ORDER BY ID允許查詢通過ID號進行排序。正如我所說,如果您的表中有一個作爲主鍵的ID,您的最新條目將具有最大的ID號。 4. DESC允許按降序排序。 5. LIMIT 1允許只返回1行。 6.編寫原始查詢時一定要小心,當你不仔細處理查詢時,查詢中的空白可能會帶來很大的痛苦。

有關進一步的查詢,你可以看到this教程。很明顯,Divya的回答也很好。

1

可以使用cursor檢索行,並說:

cursor.moveToLast(); 

OR

cursor.moveToPosition(cursor.getCount() - 1); 
0

將行插入到表中時,插入查詢將返回最後插入的行的鍵。你現在可以使用這個鍵來更新這一行。

例如

INT newInsertedKey = sqLiteDatabase.insert(TABLE_NAME,NULL,contentValues);

更新table_name的集列名=「更改2」,其中ColumnID的= newInsertedKey

的有效方法是避免了數據庫查詢來獲取最後更新的行。

0

也許他應該使用這樣的

public long getLastId() { 
    Cursor c = mDb.query(currentTableName, new String[] { "MAX(_id)" }, 
      null, null, null, null, null, null); 

      try{ 
    c.moveToFirst(); 
    long id = c.getLong(0); 
    return id; 
      }catch(Exception e){ 
       return 0; 
      } 

}

其中_id是由你確定排列