我正在玩一个我在互联网上找到的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 :(得分:0)
以下是SQLite数据库上的更新操作的方法签名。
int android.database.sqlite.SQLiteDatabase.update(
String table, ContentValues values, String whereClause, String[] whereArgs)
您可以在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
所以,第一个例子不起作用。