2012-01-14 7 views
2

Я был особенно осторожен, чтобы правильно обрабатывать все SQLExceptions из ORMLite в моем приложении, только чтобы обнаружить, что под ORMLite sqlite Android бросает исключения времени выполнения, как будто им просто все равно.SQLiteExceptions не обрабатываются ORMLite?

Есть ли способ избежать необходимости использования SQLiteExceptions и ORMLites Android SQLExceptions?

Вот пример трассировки стека из метода, который ловит SQLExceptions, но явно не SQLiteExceptions.

 
E/AndroidRuntime(7308): Caused by: android.database.sqlite.SQLiteException: unable to open database file 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1821) 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851) 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844) 
E/AndroidRuntime(7308): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544) 
E/AndroidRuntime(7308): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
E/AndroidRuntime(7308): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
E/AndroidRuntime(7308): at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:60) 
E/AndroidRuntime(7308): at com.j256.ormlite.android.AndroidConnectionSource.getReadOnlyConnection(AndroidConnectionSource.java:50) 
E/AndroidRuntime(7308): at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:189) 
E/AndroidRuntime(7308): at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:153) 
E/AndroidRuntime(7308): at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:245) 
E/AndroidRuntime(7308): at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:250) 
E/AndroidRuntime(7308): at au.com.ninthavenue.android.notes.application.TagsEM.getRecentTags(TagsEM.java:229) 
E/AndroidRuntime(7308): at au.com.ninthavenue.android.notes.activities.EditNote.loadTags(EditNote.java:257) 
E/AndroidRuntime(7308): at au.com.ninthavenue.android.notes.activities.EditNote.onCreate(EditNote.java:119)
+0

Помог ли мой ответ? Пожалуйста, примите это, если да. Благодарю. – Gray

ответ

1

Я не уверен, что правильный ответ здесь с точки зрения правильных способов поймать несколько исключений, но я вижу это как ошибка в ORMLite. В большинстве мест (очевидно, не все) ORMLite пытается обернуть вызовы Android, чтобы поймать и перебросить эти исключения как java.sql.SQLException s. Я изменил код в AndroidConnectionSource зарегистрировалась в багажник, чтобы быть следующим:

SQLiteDatabase db; 
try { 
    db = helper.getWritableDatabase(); 
} catch (android.database.SQLException e) { 
    throw SqlExceptionUtil.create("Unable to get writable database", e); 
} 
connection = new AndroidDatabaseConnection(db, true); 

Я added this bug к трекеру и проверил в исправлении к магистральным. Это будет в 4.34. Дайте мне знать, если вы найдете другие места, ORMLite не является надлежащим образом обертывания этих исключений.

+0

Спасибо, серый. Любая идея, когда вы выпустите эту версию? –

+0

Я недавно выпустил релиз, и я обычно жду немного до следующего. Найдите меня на веб-сайте ORMLite, и я напишу вам собственную версию. – Gray

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