使用ormlite框架 SQLiteReadOnlyDatabaseException异常
来源:互联网 发布:python设计模式豆瓣 编辑:程序博客网 时间:2024/06/03 11:09
08-21 14:29:55.200 25690-25690/? E/uh: (ToDoFragment.java:181) - {}java.sql.SQLException: Getting a writable database from helper so@e781a54 failed
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:27) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:70) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadOnlyConnection(AndroidConnectionSource.java:55) ~[na:0.0]
at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:243) ~[na:0.0]
at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:197) ~[na:0.0]
at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:277) ~[na:0.0]
at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:366) ~[na:0.0]
at com.j256.ormlite.stmt.Where.query(Where.java:480) ~[na:0.0]
at uh.h(ToDoFragment.java:172) ~[na:na]
at ui.a(ToDoFragment_.java:23) ~[na:na]
at ui$13.run(ToDoFragment_.java:157) ~[na:na]
at android.os.Handler.handleCallback(Handler.java:739) ~[na:0.0]
at android.os.Handler.dispatchMessage(Handler.java:95) ~[na:0.0]
at android.os.Looper.loop(Looper.java:135) ~[na:0.0]
at android.app.ActivityThread.main(ActivityThread.java:5254) ~[na:0.0]
at java.lang.reflect.Method.invoke(Native Method) ~[na:0.0]
at java.lang.reflect.Method.invoke(Method.java:372) ~[na:0.0]
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) ~[na:0.0]
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) ~[na:0.0]
Caused by: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032)
at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method) ~[na:0.0]
at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734) ~[na:0.0]
at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754) ~[na:0.0]
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1676) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.setVersion(SQLiteDatabase.java:873) ~[na:0.0]
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:259) ~[na:0.0]
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:68) ~[na:0.0]
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:27) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:70) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadOnlyConnection(AndroidConnectionSource.java:55) ~[na:0.0]
at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:243) ~[na:0.0]
at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:197) ~[na:0.0]
at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:277) ~[na:0.0]
at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:366) ~[na:0.0]
at com.j256.ormlite.stmt.Where.query(Where.java:480) ~[na:0.0]
at uh.h(ToDoFragment.java:172) ~[na:na]
at ui.a(ToDoFragment_.java:23) ~[na:na]
at ui$13.run(ToDoFragment_.java:157) ~[na:na]
at android.os.Handler.handleCallback(Handler.java:739) ~[na:0.0]
at android.os.Handler.dispatchMessage(Handler.java:95) ~[na:0.0]
at android.os.Looper.loop(Looper.java:135) ~[na:0.0]
at android.app.ActivityThread.main(ActivityThread.java:5254) ~[na:0.0]
at java.lang.reflect.Method.invoke(Native Method) ~[na:0.0]
at java.lang.reflect.Method.invoke(Method.java:372) ~[na:0.0]
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) ~[na:0.0]
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) ~[na:0.0]
Caused by: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032)
at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method) ~[na:0.0]
at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734) ~[na:0.0]
at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754) ~[na:0.0]
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1676) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) ~[na:0.0]
at android.database.sqlite.SQLiteDatabase.setVersion(SQLiteDatabase.java:873) ~[na:0.0]
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:259) ~[na:0.0]
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) ~[na:0.0]
at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:68) ~[na:0.0]
... 17 common frames omitted
对其进行修改了一下代码,即修复了上述bug!
/* 判断该Dao对应的数据库表是否已经存在,不存在的话创建数据库表 */ private void createTableIfNotExists(Dao<?, ?> dao, String Prefix, String Suffix) throws SQLException { logger.error("dao==="+(dao==null?true:false));- // logger.error("!dao.isTableExists()==="+(!dao.isTableExists()));- if (false) {//!dao.isTableExists()+ logger.error("!dao.isTableExists()==="+(!dao.isTableExists()));+ if (!dao.isTableExists()) { try {- createSingleTable(context, SQL_FILE, Prefix, Suffix);//SQL_FILE 数据库文件+ createSingleTable(context, SQL_FILE, Prefix, Suffix); logger.error("createSingleTable"); } catch (IOException e) { logger.error("", e); @@ -460,7 +460,7 @@ public class PDASqliteOpenHelper extends OrmLiteSqliteOpenHelper { while ((byteRead = in.read(buffer)) != -1) { outputStream.write(buffer, 0, byteRead); }- String sql = new String(outputStream.toByteArray(), UTF_8.name());+ String sql = new String(outputStream.toByteArray(), Charset.forName("UTF-8")); for (String line : sql.split(";(\\s)*[\n\r]")) { line = line.trim(); boolean iscreateTableSql = line.contains(createTableSql);
阅读全文
1 0
- 使用ormlite框架 SQLiteReadOnlyDatabaseException异常
- OrmLite 框架的使用
- ORMLite框架使用
- ormlite框架使用
- OrmLite框架 —— OrmLite 框架封装及使用
- OrmLite框架 —— OrmLite 入门使用(一)
- OrmLite框架 —— OrmLite 入门使用(一)
- Android 数据库框架ormlite 使用精要
- Android 数据库框架ormlite 使用精要
- android 数据库操作使用ormlite框架1
- Android 数据库框架ormlite 使用精要
- OrmLite数据库框架的集成及使用
- ORMLite数据库框架的简单使用
- 使用ORMLite(框架)创建SQLite数据库
- OrmLite框架是使用----事务管理TransactionManager
- 在android中使用OrmLite数据库框架
- android数据库框架ormlite的使用
- Android ORMLite数据库框架使用入门
- UVA
- 关于大小端的经典问题
- 代理模式-----进行事务的注解
- VNC远程登录centos系统黑屏的解决办法
- Java正则表达式的语法与示例
- 使用ormlite框架 SQLiteReadOnlyDatabaseException异常
- 从开发到部署——docker浅体验
- SQL面试总结
- python学习——函数
- BP神经网络计算过程详解,算一遍弄懂反向传播--Python计算过程
- Kerckhoffs原则
- 根据 UserAgent 判断网页是在浏览器、或在微信、或在APP中
- Luogu P1198 BZOJ 1012 最大数 (线段树)
- hdu 2858 ac自动机 +状态压缩dp