我是新手用户,我正在尝试使用某些字段更新记录而没有什么特别之处。我注意到!这可能会回答很多次,但没有提出的答案是有效的,我不知道在哪里检查我的代码来找到解决方案。我有以下内容:
public int updateUser(User user) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(U_ID, user.getId());
values.put(U_NAME, user.getName());
values.put(U_EMAIL, user.getEmail());
values.put(U_ZIP, user.getZip());
values.put(U_CREATED_AT, user.getCreated_at());
int res = db.update("login_user", values, "U_ID" + "=?", new String[] {String.valueOf(user.getId())});
return res;
}
我试过了
int res = db.update("login_user", values, "U_ID" + " = ?", new String[] {String.valueOf(user.getId())});
int res = db.update("login_user", values, "U_ID" + "=?", new String[] {(UserId)});
int res = db.update(MYTABLE, values, U_ID + "=?", new String[] {String.valueOf(user.getId())});
我增加了我的数据库版本以使其为空我保存了一条新记录
我的数据不是空的,但我得到res = 0而不是预期的res = 1并且没有错误
我做错了什么以及在哪里看?
答案 0 :(得分:0)
Sqlite Update方法的响应是更新的行数。
如果该记录存在于数据库中,那么它将返回1(或更多)
如果您已更新了所有记录的DB编号 - 请验证该记录是否存在。
如果它返回0,那么我怀疑你首先没有在数据库中记录 - 所以0记录被更新。
如果您期望1 - 那么首先通过ADB检查记录是否存在 - 请参阅此answer,了解如何检查数据库的内容。
答案 1 :(得分:0)
这就是你的问题
我增加了数据库版本以使其为空
假设您的数据库为空,那么您应该使用insert方法。更新空表将不会产生任何影响,因为update语句中的WHERE条件将始终返回false。
db.insertWithOnConflict (String table,
null, //nullColumnHack
values,
SQLiteDatabase.CONFLICT_REPLACE);
如果找不到userId,则会创建一个条目;如果发生冲突,则会替换现有的userId行