ORMLite 不处理 SQLiteException?
我特别小心地在我的应用程序中正确处理来自 ORMLite 的所有 SQLException,却发现在 ORMLite 下 android 的 sqlite 正在抛出运行时异常,就像他们根本不关心一样。
有什么方法可以避免处理 Android 的 SQLiteException 和 ORMLites SQLException?
下面是捕获 SQLException 的方法的示例堆栈跟踪,但显然不是 SQLiteException。
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不确定捕获多个异常的正确方法的正确答案是什么,但我将其视为 ORMLite 中的错误。在大多数地方(显然不是全部)ORMLite 尝试包装 Android 调用以捕获这些异常并将其重新抛出为
java.sql.SQLException
。我已将检入主干的 AndroidConnectionSource 中的代码更改为以下内容:我已 将此错误添加到跟踪器中,并检查了对主干的修复。将于 4.34 发布。如果您发现其他地方 ORMLite 没有正确包装这些异常,请告诉我。
I'm not sure what the proper answer is here in terms of proper ways to catch multiple exceptions, but I see it as a bug in ORMLite. In most places (obviously not all) ORMLite tries to wrap the Android calls to catch and re-throw these exceptions as
java.sql.SQLException
s. I've changed the code in AndroidConnectionSource checked into trunk to be the following:I've added this bug to the tracker and checked in the fix to trunk. It will be in 4.34. Let me know if you find other places were ORMLite is not properly wrapping these exceptions.