开发者社区> 问答> 正文

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]



@JFinal 请波总指点迷津

展开
收起
爱吃鱼的程序员 2020-06-09 16:40:49 9600 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    异常抛出的问题?catch了异常,导致无法抛出,事务无法执行?

    猜一下。。

    跟踪了以下代码在这里catch里异常,不明白怎么回事:Dbpro.class第642行conn.setTransactionIsolation(transactionLevel);catch(Throwablet){……}这些升级到jfinal2.2设置隔离级别就可以解决,

    Db.tx(Connection.TRANSACTION_SERIALIZABLE,newIAtom(){

    2020-06-09 16:41:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
微信SQLite数据库损坏恢复实践 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载