当前位置 : 主页 > 手机开发 > android >

android-execSQL()与UPDATE不更新

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在尝试使用rawQuery和execSQL方法来操作我的数据库,而不是.update,.insert等.我正在尝试使用以下代码执行更新: db.execSQL("UPDATE configuration " + "SET number_fields = " + number_fields + ", " + "frequen
我正在尝试使用rawQuery和execSQL方法来操作我的数据库,而不是.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) + ";");

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

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

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

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

从 Android SQLiteDatabase class documentation:

Execute a single SQL statement that is NOT a SELECT or any other SQL
statement that returns data.

It has no means to return any data (such as the number of affected
rows). Instead, you’re encouraged to use insert(String, String,
ContentValues), update(String, ContentValues, String, String[]), et
al, when possible.

然后呢:

For UPDATE statements, use any of the following instead.

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

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

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

网友评论