mysql getconnection 如何关闭连接_【MySQL】使用连接池获取Connection执行sql以及mybatis事务注意事项...

注意: 使用DataSourceUtils.getConnection(dataSource);方式获取连接,而不是dataSource.getConnection()。

dataSource.getConnection()会取到非当前线程的连接导致和当前线程的事务中的连接不相同导致事务不生效的问题。

mybatis插入语句结合connection执行自定义sql插入语句的事务例子:

注意:结合mybatis插入语句事务时,必须保证connection是相同的,通过DataSourceUtils.getConnection(dataSource);来获取当前线程的connection,使用数据源时执行connection后必须要对PreparedStatement和ResultSet进行关闭,不能关闭connection(关闭将会抛出“提交事务时,连接已被关闭”)

下面是java代码 service层

@Autowired

private DataSource dataSource;

@Transactional()

public void aazz() throws Exception {

Connection connection = DataSourceUtils.getConnection(dataSource);

System.out.println("service diy jdbc::::::::::::" + connection.toString());

PreparedStatement preparedStatement = connection.prepareStatement(

"INSERT INTO`hmccgisDB_sit`.`GIS_TASK` (`ID`, `TASK_TITLE`, `TASK_DATA`,`TASK_DATA_REMARK`, `EMAIL`, `TEMPLATE_NAME`, `IS_APPEND`, `SOURCE`) VALUES('4', '5658', '', NULL, '', NULL, '0', '0')");

// 执行自定义sql插入

int a = preparedStatement.executeUpdate();

System.out.println(a);

preparedStatement.close();

PreparedStatement preparedStatement2 = connection.prepareStatement(

"INSERT INTO`hmccgisDB_sit`.`GIS_TASK` (`ID`, `TASK_TITLE`, `TASK_DATA`,`TASK_DATA_REMARK`, `EMAIL`, `TEMPLATE_NAME`, `IS_APPEND`, `SOURCE`) VALUES('5', '5658', '', NULL, '', NULL, '0', '0')");

// 执行自定义sql插入

int b = preparedStatement2.executeUpdate();

System.out.println(b);

preparedStatement2.close();

// connection.close();

// mybatis插入语句

payInfoMapper.aazz();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值