SQLite更新

时间:2018-04-30 12:59:42

标签: android sqlite

我阅读了很多文档但我不知道为什么我的代码不起作用。 我想更新我的表,这是我的代码:

public boolean updateSetting(int id, String cordinates, String ip, String port, String message, String sendTime) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    try {
        //contentValues.put(clmKeyId,0);
        if (cordinates!=null) {
            contentValues.put(clmCordinates, cordinates);
        }
        contentValues.put(clmIp, ip);
        contentValues.put(clmPort, port);
        contentValues.put(clmDeviceMessage, message);
        contentValues.put(clmSendTime, sendTime);
    } catch (Exception e) {
        e.printStackTrace();
    }
    int checkUpdate = db.update(tblSetting, contentValues,clmSettingKeyId + " = "+ id,null);

    db.close();
        return checkUpdate>0;
    }

这是我的调用方法:

    DataBaseHelper dataBaseHelper = new DataBaseHelper(this);
        boolean value = dataBaseHelper.updateSetting(0, cordinates, edtIdp.getText().toString().trim(), edtport.getText().toString().trim(), edtMessage.getText().toString().trim(), edtSendTime.getText().toString().trim());
        if (value)
            //doSomthing
}

但我的update Setting方法总是返回0。 请帮帮我。

3 个答案:

答案 0 :(得分:0)

我认为,由于下线,你每次都得到0: -

dataBaseHelper.updateSetting(0, cordinates, edtIdp.getText().toString().trim(), edtport.getText().toString().trim(), edtMessage.getText().toString().trim(), edtSendTime.getText().toString().trim());

请将您的 ID设置为tblSetting中的自动增量。然后将上面的行替换为: -

dataBaseHelper.updateSetting(cordinates, edtIdp.getText().toString().trim(), edtport.getText().toString().trim(), edtMessage.getText().toString().trim(), edtSendTime.getText().toString().trim());

您的ID将自动获取,您无需手动提供。

请尝试它可能对你有帮助。

答案 1 :(得分:0)

您的问题是,您传递 0 ,因为 id 用于标识要更新的行。假设您正在使用名为 id 的列的典型用法(即它是rowid列的别名并定义为id INTEGER PRIMARY KEY(带或不带AUTOINCREMENT关键字))那么 id 将不会 0 。分配的第一个 ID 1 ,然后可能 2 ,然后在插入新行时可能 3 。 ......

因此,您将返回0,因为由于UPDATE的WHERE子句而没有要更新的行。

如果您将 0 更改为 1 ,那么更新可能会起作用(再次假设通常使用id列并且没有删除任何行)所以,也许试试: -

dataBaseHelper.updateSetting(1, cordinates, edtIdp.getText().toString().trim(), edtport.getText().toString().trim(), edtMessage.getText().toString().trim(), edtSendTime.getText().toString().trim());

理想情况下,您需要准确识别需要更新的行(即获取有效的 ID ,可能通过呈现给用户的列表)。

答案 2 :(得分:-1)

我根据您的键和值提供我的代码更改。

在此代码下面更新数据库中的数据。

public void updateNote(NoteData noteData, int id) {
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy h:mm a");
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("date", sdf.format(new Date(noteData.getDatetime())));
    contentValues.put("note", noteData.getNote());
    String selection = "id=" + id;
    int count = db.update(
            NOTE_TABLE_NAME,
            contentValues,
            selection,
            null);
    db.close();
}