SQLite更新不会保存或无法执行

时间:2010-12-26 04:05:53

标签: android sqlite

我正在尝试运行SQL更新,并且它返回错误。对于我的生活,我无法弄清楚出了什么问题。这个第一次尝试错误的数据库无法打开错误,这没有任何意义,因为第二次尝试打开正常:

    SQLiteDatabase db = null;
    try{
       db = SQLiteDatabase.openDatabase(dbnametmp, null, SQLiteDatabase.OPEN_READWRITE);
       for (int x = 0; x < ids.length; x++) {
            ContentValues values = new ContentValues();
            values.put("color", colors[x]);
            db.update("ColorTable", values, "id=?", new String[] {Integer.toString(ids[x])});
       }
    }catch(SQLiteException e){
       Log.e("nowsciColor", e.getMessage(), e);
    }catch(Exception e){
       Log.e("nowsciColor", e.getMessage(), e);
    }
    if (db != null)
       db.close();

第二次尝试如下。它不会引发错误,但不会发生实际更新。如果我在之后查询表(没有和重新打开数据库),则值与更新之前的值相同。我也尝试了这个没有开始和提交,并作为单独的SQL调用。

    SQLiteDatabase db = null;
    try{
       db = SQLiteDatabase.openDatabase(dbnametmp, null, SQLiteDatabase.OPEN_READWRITE);
       String sql = "begin transaction;";
       for (int x = 0; x < ids.length; x++) {
           sql += "update ColorTable set color=" + Integer.toString(colors[x]) + " where id=" + Integer.toString(ids[x]) + ";";
       }
       sql += "commit;";
       db.execSQL(sql);
    }catch(SQLiteException e){
       Log.e("nowsciColor", e.getMessage(), e);
    }catch(Exception e){
       Log.e("nowsciColor", e.getMessage(), e);
    }
    if (db != null)
       db.close();

在计算机上的数据库中运行这些完全相同的查询可以正常工作。任何其他应用程序也不使用该数据库。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

@Mimisbrunnr:权限很好,实际上App正在运行su。

@ st0le:我尝试使用相同的结果作为单独和合并的语句,并且没有触发第二种方法的异常,只是第一种方法,这是一个无法打开数据库。

@CommonsWare:在添加开始/设置/结束代码时,我意识到有一条消息没有在我的标签的LogCat中打印,所以它正在滑过我:

12-27 14:19:21.043:ERROR / Database(1075):执行'BEGIN EXCLUSIVE;'时,在0x2909b0上失败14(无法打开数据库文件)

此数据库文件是从正在使用的文件中复制的。但是,手机重新启动,它仍然有此消息。怎么文件仍然被锁定?是否有一些临时文件我需要删除或标记我需要清除?

谢谢!