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



我尝试了以下sqlite查询:

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

,字段同步和id_servizio都是整数。方法可更新是:

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

所有这些都很好。但是,如果我使用RawQuery()方法尝试:

 public Cursor RawQuery(String sqlQuery, String[] columns){
    return mDb.rawQuery(sqlQuery, columns);    
}

桌子没有更新!即使没有发生错误。

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

为什么这不起作用?

这是因为返回了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();

我不知道需要致电movetofirst(),但这可以正常工作并且数据库更新。

解决了问题。

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

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

如果我想返回表,我必须使用rawQuery,否!

增加了Android/SQLite数据库中记录的值

您应该使用db.execsql()代替db.rawquery()。

而不是这样做:

Cursor c= dbManager.RawQuery(updateQuery, null);
c.moveToFirst();
c.close();

您只需要这个:

dbManager.execSQL(updateQuery, null);

----------------------------------------------------------------------------------------------------------------------

发布答案是因为有时许多人(像我一样)不阅读评论。最受欢迎的答案是不正确的,但Yaqub Ahmad的评论是正确的。

在此答案中解释了Commonsware的答案:

RawQuery()用于返回结果集的SQL语句。使用 SQL语句(例如插入)的execsql()不会返回结果 放。

----------------------------------------------------------------------------------------------------------------------

execsql的文档:

public void execSQL (String sql)

执行不是返回数据的单个SQL语句或任何其他SQL语句。

RAWQUERY的文档:

public Cursor rawQuery (String sql, 
                String[] selectionArgs)

运行提供的SQL并在结果集上返回光标。

您的update调用格式为字符串,而rawQuery调用格式为数字。

假设表中的ID确实是字符串,请使用:

String updateQuery = "UPDATE myTable SET sync = 1 WHERE id_servizio = '" + idServizio + "'";

最新更新