我尝试了以下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 + "'";