更新特定行的特定列的值。 Android SQLite

时间:2017-08-20 04:29:25

标签: android sqlite android-sqlite

我有一个recyclerview持卡人,使用' NAME'来自表格' ORDERTABLE'。持卡人还有一个EditText,显示列'QUANTITY'的值。在我的SQLite数据库中。

我还有一个按钮,可以为EditText中的每个更改更新数据库。

我有这个表ORDERTABLE

id      NAME         QUANTITY

 1      Order1          1
 2      Order2          1
 3      Order3          1
 4      Order4          1 

更具体一点,我如何使用EditText的新值更新onButtonPressed上的Order2的QUANTITY。

编辑...

我试过这段代码但没有发生任何事情

按钮更新值

public void addButtonClick(TextView tv_cardrowName_atc, TextView tv_currentPrice_atc, EditText et_quantity_atc, int position) {

            int thisQuantity = Integer.parseInt(et_quantity_atc.getText().toString());
            thisQuantity++;

            String orderName = tv_cardrowName_atc.getText().toString();
            String oldQuantity = et_quantity_atc.getText().toString();

            String newQuantity = String.valueOf(thisQuantity);
            sqliteCBLCAdapter.selectUpdateItem(orderName, oldQuantity, newQuantity);


            et_quantity_atc.setText(String.valueOf(thisQuantity));
        }

更新方法

public String selectUpdateItem(String orderName, String oldQuantity, String newQuantity) {

    SQLiteDatabase sqLiteDatabase = sqLiteCBLC.getWritableDatabase();
    String[] columns = {SQLiteCBLC.COL_ORDNAME, SQLiteCBLC.COL_QUANTITY};
    Cursor cursor = sqLiteDatabase.query(SQLiteCBLC.TABLE_NAME, columns, SQLiteCBLC.COL_ORDNAME + " = '" + orderName + "'", null, null, null, null);
    StringBuffer stringBuffer = new StringBuffer();
    while (cursor.moveToNext()) {
        int index1 = cursor.getColumnIndex(SQLiteCBLC.COL_ORDNAME);
        int index2 = cursor.getColumnIndex(SQLiteCBLC.COL_QUANTITY);
        String order = cursor.getString(index1);
        String quantity = cursor.getString(index2);

        ContentValues contentValues = new ContentValues();
        contentValues.put(SQLiteCBLC.COL_QUANTITY, newQuantity);
        String[] whereArgs = {quantity};
        sqLiteDatabase.update(SQLiteCBLC.TABLE_NAME, contentValues, SQLiteCBLC.COL_QUANTITY + " =? ", whereArgs);

        stringBuffer.append(order);

    }



    return stringBuffer.toString();
}

2 个答案:

答案 0 :(得分:2)

实现此目的的最简单方法是使用SQL更新查询,如下所示:

来自SQLite网站:

SQLite UPDATE Query用于修改表中的现有记录。您可以使用带有UPDATE查询的WHERE子句来更新所选行,否则将更新所有行。

更新查询的语法如下:

 UPDATE table_name
 SET column1 = value1, column2 = value2...., columnN = valueN
 WHERE [condition];

所以在你的情况下你的sql更新查询会看起来像这样:

UPDATE ORDERTABLE SET QUANTITY = (INSERT VALUE OF YOUR EDIT TEXT) WHERE NAME =   'Order2'

然后,您可以使用您拥有的SQLiteDatabase对象的execSQL()方法执行查询,并将上面的sql查询作为字符串参数传递。

答案 1 :(得分:1)

您可以尝试以下代码,在您的情况下,您在更新时根据数量进行更新,多个订单将具有相同的数量。只需检查订单名称并进行更新。

try {
    downloadId = await dispatch(requestDownload('SOME_URL'));
} catch(ex) {
    console.log('download already existed, so request denied');
}