Android数据库rawQuery未按预期工作

Android数据库rawQuery未按预期工作,android,sql,sqlite,Android,Sql,Sqlite,这是我试图运行的代码: open(); database.beginTransaction(); Cursor cursor = database.rawQuery("UPDATE message SET is_read=1 WHERE id = 'user1' AND (mid IN ('msg1','msg2'))",null); if (cursor != null) { if (cursor.mov

这是我试图运行的代码:

        open();
        database.beginTransaction();

        Cursor cursor = database.rawQuery("UPDATE message SET is_read=1 WHERE id = 'user1' AND (mid IN ('msg1','msg2'))",null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                <... success ...>
            }
            cursor.close();
        }
        database.endTransaction();
        close();
open();
database.beginTransaction();
Cursor Cursor=database.rawQuery(“更新消息集为_read=1,其中id='user1'和('msg1','msg2'))”,null);
如果(光标!=null){
if(cursor.moveToFirst()){
}
cursor.close();
}
数据库。endTransaction();
close();
它不起作用-响应成功,但我的游标没有更新的行


对同一数据库的相同查询在纯SQL中工作得非常好(我使用的是sqlitebrowser)。这里发生了什么?

试试这个,您需要在事务完成后设置事务成功

Cursor cursor = database.rawQuery("UPDATE message SET is_read=1 WHERE id = 'user1' AND (mid IN ('msg1','msg2'))",null);
  if (cursor != null) {
        if (cursor.moveToFirst()) {
             <... success ...>
         }
         cursor.close();
        }
    database.setTransactionSuccessful();
    database.endTransaction();
    close();
Cursor Cursor=database.rawQuery(“更新消息集为_read=1,其中id='user1'和('msg1','msg2'))”,null);
如果(光标!=null){
if(cursor.moveToFirst()){
}
cursor.close();
}
database.setTransactionSuccessful();
数据库。endTransaction();
close();

尝试此操作,您需要在事务完成后设置事务成功

Cursor cursor = database.rawQuery("UPDATE message SET is_read=1 WHERE id = 'user1' AND (mid IN ('msg1','msg2'))",null);
  if (cursor != null) {
        if (cursor.moveToFirst()) {
             <... success ...>
         }
         cursor.close();
        }
    database.setTransactionSuccessful();
    database.endTransaction();
    close();
Cursor Cursor=database.rawQuery(“更新消息集为_read=1,其中id='user1'和('msg1','msg2'))”,null);
如果(光标!=null){
if(cursor.moveToFirst()){
}
cursor.close();
}
database.setTransactionSuccessful();
数据库。endTransaction();
close();

由于这是一个更新,我建议您更改
execSQL
rawQuery


此处详细介绍了两者之间的区别:

由于这是一个更新,我建议您更改
execSQL
rawQuery


这里详细介绍了两者之间的区别:

try with and mid IN('msg1','msg2')为什么您希望
UPDATE
的行为类似于
SELECT
?@eagleye感谢您的建议-之前尝试过,再次尝试,结果相同@黑带我所期望的是
mUpdateRows
光标内部的大小!=0-如果你说的是moveToFirst-那只是有人在另一篇文章中建议的。我只需要counttry with AND mid IN('msg1','msg2')为什么您希望
UPDATE
的行为类似于
SELECT
?@eagleye感谢您的建议-之前尝试过,再次尝试,结果相同@黑带我所期望的是
mUpdateRows
光标内部的大小!=0-如果你说的是moveToFirst-那只是有人在另一篇文章中建议的。我只需要countA交易必须标记为成功。如果不这样做,事务中的所有更改都将回滚。如果调用transactionSuccessful,则只有它提交,否则它将回滚。事务必须标记为成功。如果不这样做,事务中的所有更改都将回滚。如果调用transactionSuccessful,则只有它提交,否则它将回滚。