
你也可以自己写
主要注意
执行sql插入前要取消自动提交 con.setAutoCommit(false)
全部sql语句执行完成后再提交 con.commit()
执行过程抛出异常则回滚 con.rollback()
希望对你有帮助
public boolean exeupdate(List<String>sqls) throws SQLException {
boolean flag = false
openPoolConnection()//创建连接
try {
//
con.setAutoCommit(false)//取消自动提交
for(int i=0i<sqls.size()i++)
{
pstmt = con.prepareStatement(sqls.get(i))
int rows = pstmt.executeUpdate()
}
flag = true
con.commit()//提交
} catch (Exception e) {
con.rollback()//回滚
e.printStackTrace()
} finally {
this.closeAll()//关闭连接 数据集 语句对象
}
return flag
}
getPreparedStatement(conn,sql,item)
方法是干啥的,贴出来
其实问题很简单
MyLog.e(">>>提交之前<<<")//在try块内添加事务的提交 *** 作,表示 *** 作无异常,提交事务。
conn.commit()//此处都没有执行到
MyLog.e(">>>全部提交了<<<")
} catch (SQLException e) {
isInsertOk = false
MyLog.e(">>>出错,准备rollback<<<")
try {
上面的那个SQLException e
换成 Exception e 应该就可以了,
你的setAutoCommit(false)是通过自己写代码设置的还是在TransactionManager.beginTransaction()中设置的?我看描述可能是事务这里封装的有问题或者是你用的有问题。你搞不明白的话,可以自己去实现事务,那样逻辑比较清晰。
恩 和楼下见解一样,推荐你把TransactionManager去掉,换成 setAutoCommit(false),commit(),rollback() 试试。最原始的总是最容易理解的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)