SQLITE更新ROW无法正常工作

时间:2017-07-13 12:17:26

标签: java android sqlite android-sqlite

我试图更新特定的行,但没有运气。 我是第一次使用sqlite,也许它真的与列/行混淆了 理想情况下,我希望在名称为MESSAGE_HISTORY(id = 5)的字段中更新文本 相同的方式和代码适用于字段Item0(id = 1)

public static void updateHistory(ArrayList<MessageModel> models, String id) {
        if (database != null) {
            Cursor c = database.query(TDatabaseHelper.DATABASE_TABLE,null,null, null, null, null, null);
            if (c.moveToFirst()) {
                do {
                    int index1 = c.getColumnIndex(MESSAGE_HISTORY);//return position 5
                    ContentValues data = new ContentValues();
                    data.put(MESSAGE_HISTORY, DatabaseHelper.chatHistoryModelsConvert(models, id).toString());
                    long k = database.update(TDatabaseHelper.DATABASE_TABLE, data, "id=" + index1, null);
                    DBLogger.w("DATABASE UPDATE STATUS = "+k);
                  }while(!c.moveToFirst());
            }else {
                DBLogger.d("Error");
            }
        }
    }

K始终返回0 有帮助吗? 的 [UPD]

public static void CreateDB() {
        if (database != null) {
            Cursor c = database.query(TDatabaseHelper.DATABASE_TABLE, null, null, null, null, null, null);
            if (!c.moveToFirst()) {
                cv.put(TDatabaseHelper.ITEM0, "Item0"); // <---- this item update very good index = 1
                cv.put(TDatabaseHelper.MESSAGE_HISTORY, "history"); <-- cant update, index = 5;
                cv.put(TDatabaseHelper.ITEM1, "item1");
                cv.put(TDatabaseHelper.ITEM2, "item2");
                cv.put(TDatabaseHelper.ITEM3, "item3");
                long rowID = database.insert(TDatabaseHelper.DATABASE_TABLE, null, cv);
                DBLogger.i("row inserted, ID = " + rowID);
            }
        }
    }

[UPD] 这没有用:(

  String[] args = new String[]{""+index1}; ??database.update(TDatabaseHelper.DATABASE_TABLE, data, "id=?", args);

1 个答案:

答案 0 :(得分:1)

以下行为您提供了名为MESSAGE_HISTORY的列的索引,但它没有为您提供值。

int index1 = c.getColumnIndex(MESSAGE_HISTORY);//return position 5

因此,您的行

 long k = database.update(TDatabaseHelper.DATABASE_TABLE, data, "id=" + index1, null);

更新id为“5”的行,似乎它不存在。您需要获取第5列中的值,因此请执行以下操作:

String messageValue = c.getString(index1);
long k = database.update(TDatabaseHelper.DATABASE_TABLE, data, 
    MESSAGE_HISTORY + " = ?", new String[] {messageValue});

最好在此处使用whereArgs,因为只是附加messageValue可能会导致问题。有关whereClausewhereArgs

,请参阅update documentation

在任何情况下,将调试器打到最后一行,以准确查看传递给update方法的内容。你可能会感到惊讶。