2013-03-18 2 views
4

У меня довольно много клиентов, получающих исключение, упомянутое в заголовке, но я не могу воспроизвести его ни на одном из моих устройств.Android Sqlite SQLiteDiskIOException: ошибка ввода-вывода диска (код 1290) SQLITE_IOERR_DIR_FSYNC

Отчеты об ошибках показывают, что ошибка происходит только на устройствах Sony, но я не могу найти никаких сообщений о том, что Sony делает что-то смешное с их базами данных на Android.

код, который вызывает это исключение окончание сделки

db.beginTransaction(); 
for(some iterator) 
    db.execSQL("UPDATE table SET column = " + value + " WHERE other_column = " + something); 
db.setTransactionSuccessful(); 
db.endTransaction(); 

StackTrace отсюда:

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1290) 
at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) 
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:559) 
at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:437) 
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401) 
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:530) 

база данных находится на внешнем накопителе (но по желанию заказчика сообщает, что происходит, когда внешнее хранилище):

SQLiteDatabase db = SQLiteDatabase.openDatabase("/path/to/sqlite", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

Просьба не быть слишком суровый в отношении кода, я знаю, что (например) должен быть try/catch вокруг операторов sql с окончанием endTransaction, но в этом случае это не имеет значения (и я не получаю ресурсы для очистки это наследие в настоящий момент).

Я нашел некоторые старые отчеты о SQLITE_IOERR_DIR_FSYNC на AIX, где FSYNC() в каталогах не был поддержан, но это не помогает мне, так как я, очевидно, не могу recomplie SQLite с правильными флагами компилятора на Android ...

Любые идеи?

+0

Вы пытались воспроизвести ошибку на том же устройстве sony в конце, на котором клиент сообщил об ошибке? –

+0

Нет, к сожалению, у меня нет доступа к любому устройству Sony, и я не могу воспроизвести его на любом из устройств, на которых я могу протестировать (Samsung Galaxy 1 & 2, Nexus S, Nexus 4, несколько планшетов Samsung и 7 "Kindle Fire HD), на самом деле ошибка не произошла ни разу для меня ... – Pontomedon

+0

Хорошо, я могу получить руки на устройстве SE, если вы перешлите мне свой APK, я могу попробовать ... –

ответ

0

Это была ошибка в SQLite сборки Sony, я сообщил об этом на них и получили уведомление о том, что они фиксированной его. к сожалению, ошибка все еще осталась в дикой природе - но я могу смело проигнорироваться, транзакция на самом деле завершена успешно (один из последних вызовов sqlite - fsync в каталоге, содержащем базу данных, - сбой, но это не кажется в любом случае необходимо).

Смежные вопросы