为什么当我尝试更新SQLite数据库中的记录时,没有提出的解决方案不起作用?

时间:2016-12-08 14:50:13

标签: android sqlite

我是新手用户,我正在尝试使用某些字段更新记录而没有什么特别之处。我注意到!这可能会回答很多次,但没有提出的答案是有效的,我不知道在哪里检查我的代码来找到解决方案。我有以下内容:

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并且没有错误

我做错了什么以及在哪里看?

2 个答案:

答案 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行