0
我已經離開了java一段時間,並作爲一個熱身,決定運行一個基本的數據庫/清單應用程序,以幫助我跟蹤我需要的東西,因爲我移動。我基本上完成了應用程序,它大致運行但足以滿足我的目的,但是我在SQLite數據庫函數方面遇到了很多問題。我唯一需要解決的是「更新」功能。Android SQLite更新方法不會更新
這裏是我當前的代碼,我SQLITE Helper類中:
public int updateObject(HomeObject originalObject, HomeObject updatedObject) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put("name", updatedObject.getName());
values.put("room", updatedObject.getRoom()); // get title
values.put("have", updatedObject.getHave()); // get author
// 3. updating row
int i = db.update(TABLE_HomeObjects, //table
values, // column/value
KEY_ID+" = "+String.valueOf(originalObject.getId()), // selections
null); //selection args
// 4. close
db.close();
return i;
}
然而,當我使用修改按鈕,這意味着調用此方法,並相應地更新對象,它似乎只是刪除目的。它從所有列表中消失,並且應用內搜索顯示它不再位於數據庫中。
這是我用來調用它相關的代碼如下所示:
MySQLiteHelper db = new MySQLiteHelper(this);
Intent intent = getIntent();
String itemName = intent.getStringExtra(LivingRoom.EXTRA_MESSAGE);
// Redacted... There is a large section of code here
// which deals with pulling the newlyEditedName, newlyEditedHave,
// and newlyEditedRoom variables from different places in the view.
HomeObject newlyEditedObject = new HomeObject(newlyEditedName, newlyEditedHave, newlyEditedRoom);
HomeObject originalObject = db.getObject(itemName);
int test = db.updateObject(originalObject, newlyEditedObject);
我很新的SQLite的,所以也許我失去了一些基本的東西......但什麼錯嗎?日誌顯示該方法返回「1」。作爲另一方面,我可以確認「getObject」方法完美工作,因爲它在此之前被多次使用,所以我知道它正確地返回。
謝謝你的幫助!如果我能解決這個問題,我可以開始使用這個東西。
我更新了我的代碼(在嘗試使用這兩種方法),但它仍然給了我同樣的問題。目前,我已將它設置爲後者(這是來自我正在使用的教程的編碼),但它仍然在做同樣的事情。 – 2014-09-20 07:51:08
對不起,延遲迴復。你能寫一個測試函數來運行查詢並檢查你的更新行包含什麼?而不是在數據庫中搜索更新的對象,是否可以使用該特定的KEY_ID檢查並打印更新的行所包含的內容? 這可能有助於追蹤。 – 2014-09-22 11:12:47
另外我只是注意到這一點,但爲什麼你在你的函數結束時關閉你的數據庫?應用程序尚未運行時,您不應關閉數據庫。當你想要終止你的應用程序時關閉它。這可能會導致你的錯誤 – 2014-09-22 11:14:34