带UPDATE的execSQL()不会更新

Tro*_*omB 3 sqlite android sql-update android-sqlite

我试图使用rawQueryexecSQL用于操纵方法,而不是我的数据库,.update,.insert,等我想用下面的代码进行更新:

db.execSQL("UPDATE configuration " +
                "SET number_fields = " + number_fields + ", "
                + "frequency = " + frequency + ", "
                + "ag = " + ag + ", "
                + "number_alarms = " + number_alarms + ", "
                + "failed_rapper = " + failed_rapper + ", "
                + "max_mv = " + max_mv + ", "
                + "max_nav = " + max_nav + " "
                + "WHERE serial_id = " + Integer.toString(id) + ";");
Run Code Online (Sandbox Code Playgroud)

在此操作之后,有一个日志表明发生了更新并且它似乎正常工作,但是当我尝试在表上执行select语句时,它返回时出现以下错误:

06-10 10:01:47.564: W/System.err(3815): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Run Code Online (Sandbox Code Playgroud)

现在我在Android中使用SQLite数据库浏览器手动插入的不同数据上执行了相同的SELECT,它运行正常.我也在SQLite浏览器中执行了相同的UPADTE,它在那里工作.因此我知道问题是在Android上运行时UPDATE命令不起作用.

问题:为什么UPDATE命令在execSQL()方法中不起作用?

Mat*_*vis 6

Android SQLiteDatabase类文档:

执行一个非SELECT的SQL语句或任何其他返回数据的SQL语句.

它无法返回任何数据(例如受影响的行数).相反,我们鼓励您尽可能使用insert(String,String,ContentValues),update(String,ContentValues,String,String [])等.

然后呢:

对于UPDATE语句,请改用以下任何一种语句.

update(String,ContentValues,String,String [])

updateWithOnConflict(String,ContentValues,String,String [],int)

据我所知道的,execSQL方法是更多更高级别的数据库操作,如创建表和改变的模式,和.query,.update,.delete,等方法应被用于修改行.除了.update执行此操作之外,我不确定您还有其他选择.