Android - SQLite更新声明

时间:2017-05-28 07:52:35

标签: android sqlite android-sqlite

我正在玩一个我在互联网上找到的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())});
}

有人可以告诉我区别吗?

2 个答案:

答案 0 :(得分:0)

以下是SQLite数据库上的更新操作的方法签名。

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

来自developer.android.com

  

您可以在where子句中包含?,该子句将被替换   来自whereArgs的值。这些值将绑定为字符串。

顺便说一下,你的第一个例子不会起作用,因为你已经加入了 " KEY_ID + " = ?" + contact.getID()"在whereClause param中保留whereArgs null。 ?s将被您的arg contact.getId()

替换

将第一个示例中的whereClause更改为:KEY_ID + " = " + contact.getID()

答案 1 :(得分:0)

在您的第一个示例中。代码无法更新任何内容。

update方法whereCause参数将转换为某种情况下的SQL,它会将?占位符替换为whereArgs

如:

在你的第一个例子中。如果contact.getId()返回1,那么最终的SQL就像:

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

但是第二个示例最终SQL就像:

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

所以,第一个例子不起作用。