我正在尝试运行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();
在计算机上的数据库中运行这些完全相同的查询可以正常工作。任何其他应用程序也不使用该数据库。任何帮助将不胜感激。
答案 0 :(得分:0)
@Mimisbrunnr:权限很好,实际上App正在运行su。
@ st0le:我尝试使用相同的结果作为单独和合并的语句,并且没有触发第二种方法的异常,只是第一种方法,这是一个无法打开数据库。
@CommonsWare:在添加开始/设置/结束代码时,我意识到有一条消息没有在我的标签的LogCat中打印,所以它正在滑过我:
12-27 14:19:21.043:ERROR / Database(1075):执行'BEGIN EXCLUSIVE;'时,在0x2909b0上失败14(无法打开数据库文件)
此数据库文件是从正在使用的文件中复制的。但是,手机重新启动,它仍然有此消息。怎么文件仍然被锁定?是否有一些临时文件我需要删除或标记我需要清除?
谢谢!