2011-11-03 68 views
0

我在理解SQLite的更新命令時遇到了一些困難。理解sqlite上的更新命令

在我的示例中,我執行更新數據庫,但如果出現錯誤,我提供了錯誤消息。如果用戶嘗試更新不存在的記錄,則不會收到錯誤消息。

這裏是我的代碼,第一個更新命令,然後我的電話:

public long updateContact(String firstName, String lastName, String address, String city, String state, 
     int zipCode, long mobileNumber, long altNumber, String email) { 
    ContentValues contactInfo = new ContentValues(); 
    contactInfo.put(KEY_FNAME, firstName); 
    contactInfo.put(KEY_LNAME, lastName); 
    contactInfo.put(KEY_ADDR, address); 
    contactInfo.put(KEY_CITY, city); 
    contactInfo.put(KEY_STATE, state); 
    contactInfo.put(KEY_ZIP, zipCode); 
    contactInfo.put(KEY_MOBILE, mobileNumber); 
    contactInfo.put(KEY_ALT, altNumber); 
    contactInfo.put(KEY_EMAIL, email); 

    String where = "FIRSTNAME = '" + firstName + "' AND LASTNAME = '" + lastName + "'"; 

    return db.update(DATABASE_TABLE, contactInfo, where, null); 
} 

召喚:

if (searchTerm.length() > 0) { 
         id = db.updateContact(fName, lName, address.getText().toString().trim(), 
            city.getText().toString().trim(), state.getSelectedItem().toString().trim(), Integer.parseInt(zip.getText().toString().trim()), 
            Long.valueOf(mobile.getText().toString().trim()), Long.valueOf(alternate.getText().toString().trim()), 
            email.getText().toString().trim()); 
         if (id == -1) { 
          DisplayErrorDialog("I'm sorry, we can not update the contact with the present data."); 
         } 
        } 

的更新工作時,我給它的有效數據。但是,當我給它無效的數據(名稱不在數據庫中)時,我沒有收到相應的錯誤消息。

回答

1

返回值是更新的行數,而不是id。檢查0,而不是-1。這意味着您可能會更新多條記錄,這就是數據庫更新通常的工作方式。

2

fine manual

返回
行數影響

所以db.update將返回0時,沒有被更新(即你的where沒有匹配任何行)並且該零將由updateContact返回。因此,您可能需要將id重命名爲numberUpdated(或類似),並在numberUpdated <= 0上顯示錯誤,而不是查找-1

+0

我向你投了贊。你說過我做過的同樣的事情;) –