事务在更新插入的用法

本文对比了Spring和Struts框架中事务处理的方式。Spring使用@Transactional注解简化了事务管理,而Struts则需要手动编写更多的代码来实现。文章还讨论了JDBC批量执行SQL脚本时的局限性。

近期接触了spring,发现以前的struts数据库事务好麻烦,spring只需要添加注解就可以引入注解,但是struts编写时还需要代码片段,此处仅为记录。
spring : @Transactional(rollbackFor = Exception.class)
struts:

public void testTransaction() throws Exception
{
Connection conn = null;
Statement st = null;
PreparedStatement pst = null;
try
{
conn = JDBCHelper.getConnection();

conn.setAutoCommit(false);
String sql1 = "update t_account t set t.money=t.money-100 where t.name =?";
String sql2 = "update t_account t set t.money=t.money+100 where t.name =?";
pst = conn.prepareStatement(sql1);
// 只能批量执行某一条固定的sql语句,并且进行参数化设置
pst.setString(1, "a"); 
pst.addBatch();
pst.setString(1, "b"); 
pst.addBatch();
pst.executeBatch(); // 只能在执行完成以后提交一次,然后改成新的sql脚本。但容易引发内存泄漏
pst = conn.prepareStatement(sql2); // 内存泄漏,存在未关闭的链接
pst.setString(1, "c");
pst.addBatch();
pst.executeBatch();
conn.commit();

}
catch (Exception e)
{
conn.rollback();
}
finally
{
JDBCHelper.disposeConnect(pst, conn);
}
}

最后进行一个知识点补漏:JDBC执行多条sql脚本。

  JDBC提供了执行多条sql语句的方法,使用PrepareStatement或Statement实例调用addBatch方法。目前发现该方法有几个缺点:
无法通过PrepareStatement实例对多条不同的sql脚本进行参数化设置。因为PrepareStatement是由一个链接产生的,不能同时用一个prepareStatement实例同时对应两个不同的预处理文件。
如需求:需要插入更新一张表里面的两行不同的数据。这时候没办法使用prepareStatement的addBatch方法执行操作。
struts片段引用自 https://www.cnblogs.com/jiangyi666/p/5959351.html,详细代码可以查看原文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值