使用rawQuery()方法更新表不起作用

GVi*_*i82 7 sqlite android

我尝试了以下SQLite查询:

    int idServizo = 150;
    String whereClause = id_servizio+" = '"+idServizio+" ' ";
    ContentValues cv = new ContentValues();
    cv.put("sync", 1);

    int r = dbManager.updateTable("myTable", cv, whereClause);
Run Code Online (Sandbox Code Playgroud)

字段sync和id_servizio都是整数.updateTable方法是:

 public int updateTable(String table, ContentValues values, String whereClause){
    int r = mDb.update(table, values, whereClause, null);
    return r;
}

 // mDb is SQLiteDatabase object
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但是如果我用rawQuery()方法尝试这个:

 public Cursor RawQuery(String sqlQuery, String[] columns){
    return mDb.rawQuery(sqlQuery, columns);    
}
Run Code Online (Sandbox Code Playgroud)

表格未更新!即使没有发生错误.

 int idServizo = 150;
 String updateQuery ="UPDATE myTable SET sync = 1 WHERE id_servizio = "+idServizio;
 dbManager.RawQuery(updateQuery, null);
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

DUD*_*MXP 35

这是因为当执行rawQuery时会返回游标.如果没有调用cursor.moveToFirst()cursor.close()数据库不会得到更新.

int idServizo = 150;``
String updateQuery ="UPDATE myTable SET sync = 1 WHERE id_servizio = "+idServizio;
Cursor c= dbManager.RawQuery(updateQuery, null);

c.moveToFirst();
c.close();
Run Code Online (Sandbox Code Playgroud)

我不知道需要调用moveToFirst(),但这工作正常,数据库得到更新.

  • 拯救了我的一天。谢谢 (3认同)
  • 使用 `db.execSQL()` 而不是 `db.rawQuery()`。 (2认同)

GVi*_*i82 6

问题解决了.

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

无法工作,因为rawQuery运行提供的SQL并返回Cursor结果集.

如果我想要退回一张桌子,我必须使用rawQuery,否则不!

增加android/sqlite数据库中记录的值


小智 5

您应该使用db.execSQL()代替db.rawQuery()。