Обновления SQLite не сохраняются или не могут выполняться - PullRequest
0 голосов
/ 26 декабря 2010

Я пытаюсь запустить обновление 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 голосов
/ 27 декабря 2010

@ Mimisbrunnr: Разрешения хорошие, на самом деле приложение работает с su.

@ st0le: я пробовал как отдельные, так и комбинированные операторы с одинаковыми результатами, исключения не запускались во втором методе, только первый, который был не может открыть db.

@ CommonsWare: При добавлении в начало / установка / конец кода я понял, что было одно сообщение, не печатающее в LogCat с моим тегом, поэтому оно скользиломимо меня:

12-27 14: 19: 21.043: ОШИБКА / База данных (1075): Ошибка 14 (невозможно открыть файл базы данных) в 0x2909b0 при выполнении 'BEGIN EXCLUSIVE;'

ThisФайл базы данных был скопирован с того, который использовался.Однако телефон был перезагружен, и на нем все еще есть это сообщение.Как файл все еще может быть заблокирован?Где-то есть временный файл, который мне нужно удалить или пометить, который мне нужно очистить?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...