2017-05-28 84 views
-4

我正在玩一個我在互聯網上找到的SQLite的例子。我有一個更新語句是這樣的:Android - SQLite更新聲明

public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 

    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?" + 
    contact.getID(), null); 

} 

和更新語句是這樣的:

public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 

    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
    new String[]{String.valueOf(contact.getID())}); 
} 

誰能告訴我有什麼區別?

+0

'有人可以告訴我區別嗎?'有人(你)請谷歌的SQLite教程? –

回答

0

以下是SQLite數據庫更新操作的方法簽名。

int android.database.sqlite.SQLiteDatabase.update(
     String table, ContentValues values, String whereClause, String[] whereArgs) 

developer.android.com

您可以包含?的where子句,這將是從whereArgs值來代替 英寸這些值將被綁定爲字符串。

順便說一下你的第一個例子是行不通的,因爲你已經在whereClause PARAM包括
KEY_ID + " = ?" + contact.getID()」並保持whereArgs空。該?s would'nt你ARG contact.getId()

變化whereClause在第一個例子來替代這樣:KEY_ID + " = " + contact.getID()

0

在您第一次example.The代碼不能進行任何更新。

update方法whereCause PARAMS將被轉換成在何處情況下,一些SQL,它將與whereArgs替換?佔位符。

如:

在你第一次example.If contact.getId()返回1,最終的SQL是這樣的:

update contact set KEY_NAME = 'your contact name ' where KEY_ID = ? 1

但2ST例如最後SQL是這樣的:

update contact set KEY_NAME = 'your contact name ' where KEY_ID = 1

所以,第一個例子是行不通的。