jfanal事务报错级别问题

我用了声明式事务,执行的是先删除后批量插入

int delete = Db.update("delete from BO_ACT_DPM_MONTHDMDSUMDETBAK where bindid = '"+ bindid + "'");//删除数据
//System.out.println(6 / 0);
int[] result = Db.batch(sql, colunm, updateList, 1000);

然后就报这个错误,数据库是Oracle

仅 READ_COMMITTED 和 SERIALIZABLE 是有效的事务处理级

另外

int delete = Db.update("delete from BO_ACT_DPM_MONTHDMDSUMDETBAK where bindid = '"+ bindid + "'");//

这句是能成功执行的,但是换成

int delete = Db.update("delete from BO_ACT_DPM_MONTHDMDSUMDETBAK where bindid = ?",bindid );

就不成功了.

谢谢指导。

评论区

lyh061619

2017-12-04 15:41

1、配置下事物级别,JFinal默认事物级别为:TRANSACTION_REPEATABLE_READ,根据自己情况调整下事物级别如: arp.setTransactionLevel(Connection.TRANSACTION_REPEATABLE_READ);。
2、第一个删除语句是传入的bindid为字符串,检查下你bindid数据类型是什么,然后再决定参数类型;

rex_leeeee

2017-12-04 15:44

@lyh061619 bindid的数据库类型是NVARCHAR2然后我bindid是一个String类型这样对应不上吗?

rex_leeeee

2017-12-04 15:44

lyh061619

2017-12-04 15:47

那第二是传的是什么数据类型,从刚才你上面提到的,int delete = Db.update("delete from BO_ACT_DPM_MONTHDMDSUMDETBAK where bindid = '"+ bindid + "'");//这样是成功的,然后int delete = Db.update("delete from BO_ACT_DPM_MONTHDMDSUMDETBAK where bindid = ?",bindid );是执行失败的,那么你传过来的bindid是什么数据类型,得你自己检查了。

rex_leeeee

2017-12-04 16:06

@lyh061619 谢谢,我bindid就是String类型是String bindid = getPara("bindid");这样获取的。问题是出在这里吗

JFinal

2017-12-04 17:12

根据 @lyh061619 的回复设置一下就可以了:
arp.setTransactionLevel(2);

因为 oracle 不支持 transaction level 为 4。jfinal 只有一个版本才出这个提示,其它版本处理过 oracle 下的 transaction level

热门反馈

扫码入社