0

如何将此查询与 Android 内容提供程序一起使用?

update tblTot set vMax = vMax + 15 where _id = 1;

其中 vMax 是 tblTot 表的一列。

我试过这样做

Uri totUri = Uri.parse(DbProvider.TOT_CONTENT_URI + "/1");          
ContentValues valoriTotali = new ContentValues();
valoriTotali.put(DbHelper.TBTOT_VMAX, DbHelper.TBTOT_VMAX +  " + " + newVMax);
int rcdTot = resolver.update(totUri, valoriTotali, null, null);

但它不起作用,因为此更新将值设置为字符串(“db 列名 + 值”),而不是我的 db 行中的整数。

先感谢您

4

2 回答 2

1

最好为它公开新的 URI(或在 URI 中传递附加参数)并基于此在 ContentProvider 的 update() 中采取适当的操作,如下所示 -

case CASE_URI_INCREMENT_LIKE:
String sqlStatement = "UPDATE " + Table.TABLE_NAME + " SET " +  Table.VALUE + " = " +  Table.VALUE + " + 1 WHERE " + Table.ID + "=?";
mSQLiteDatabase.execSQL(sqlStatement, selectionArgs);
break;
于 2015-06-29T01:37:39.670 回答
0

您可以获得的值vMax并将其转换为Integer

//    CAST((CAST(vMax as INTEGER) +15) AS text)

编辑:如何使用上面的行

    db = this.getReadableDatabase();
    String selectQuery = "select vMax from tblTot "
            + " where _id = 1"; 
    Cursor cursor = db.rawQuery(selectQuery, null);


    int vMax = 0;
    if (cursor.moveToFirst()) {
            Log.i(Tag, "vMax: "+cursor.getString(0) );
            vMax= Integer.parseInt(cursor.getString(0));

    }
    ContentValues values = new ContentValues();
    values.put("vMax", Integer.toString(vMax+15));
    db.update("tblTot ", values, _id + " = ?", new String[] { String.valueOf(_id ) });
    db.Close();
于 2013-05-24T09:27:05.493 回答