Jfinal中使用SQLite事务时报错
实现程序还原数据库时的批量操作,数据库采用的是SQLite,使用事物时报错,程序代码
/** * 开启事物的批量任务 * @param tableName * @param sqlColumns * @param sqlValues * @param lists */ public static void batchTask(String tableName, String sqlColumns, String sqlValues, List<Record> lists){ Db.tx(new IAtom() { @Override public boolean run() throws SQLException { try { String delSql = "delete from " + tableName; if(tableName.equals("sys_config")){ delSql = "delete from sys_config where item not in("+SysConfig.remainItems+")"; } Db.update(delSql); String sql = "insert into " + tableName + "(" + sqlColumns + ") values (" + sqlValues + ")"; Db.batch(sql, sqlColumns, lists, 100); } catch (Exception e) { e.printStackTrace(); return false; } return true; } }); }
java.sql.SQLException: database in auto-commit mode at org.sqlite.Conn.rollback(Conn.java:350) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source)
2016-03-17 10:57:05.055 ERROR com.ddt.service.platform.BackupService - com.ddt.service.platform.BackupService com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: SQLite supports only TRANSACTION_SERIALIZABLE and TRANSACTION_READ_UNCOMMITTED. at com.jfinal.plugin.activerecord.DbPro.tx(DbPro.java:655) ~[jfinal-1.9-bin-with-src.jar:na] at com.jfinal.plugin.activerecord.DbPro.tx(DbPro.java:680) ~[jfinal-1.9-bin-with-src.jar:na] at com.jfinal.plugin.activerecord.Db.tx(Db.java:440) ~[jfinal-1.9-bin-with-src.jar:na]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
设置隔离级别就可以解决,
Db.tx(Connection.TRANSACTION_SERIALIZABLE,new IAtom() {
升级到 jfinal 2.2
跟踪了以下代码在这里catch里异常,不明白怎么回事: Dbpro.class 第642行 conn.setTransactionIsolation(transactionLevel); catch (Throwable t) {……} 这些
异常抛出的问题?catch了异常,导致无法抛出,事务无法执行?
猜一下。。