记一次使用“try-with-resources“的语法导致的BUG

背景描述

最近使用try-catch的时候遇到了一个问题,背景是这样的:当第一次与数据库建立连接以后执行查询完毕并没有手动关闭连接,但是当我第二次获取连接的时候报错了,显示数据库连接失败,连接已经关闭。

 org.postgresql.util.psOlException: This connection has been closed.

解决方案

通过排查我定位到了这段代码

try (java.sql.Connection conn = DriverManager.getConnection(url, user, password);

     Statement stmt = conn.createStatement();

     ResultSet rs = stmt.executeQuery(sql)) {
     
    // 代码块...

}catch (SQLException e) {

    log.error("后端服务异常:{}", e);

    ...

}

这种写法是Java 7引入的一种称为"try-with-resources"的语法。它是一种自动资源管理的机制,用于简化需要手动关闭资源的代码。在try块结束时,括号()中声明的资源会自动关闭,无需手动调用close()方法,也就是说不需要再使用finally来关闭资源。

这个时候也就真相大白了,原因就在于当第一次与数据库建立连接以后执行查询完毕并没有手动关闭连接但是由于使用了"try-with-resources"的语法所以已经自动关闭了数据库连接。

解决方案

  • 不使用"try-with-resources"的语法
try{
	java.sql.Connection conn = 
		DriverManager.getConnection(url, user, password;

     Statement stmt = conn.createStatement();

     ResultSet rs = stmt.executeQuery(sql)) {

    // 代码块...

}catch (SQLException e) {

    log.error("后端服务异常:{}", e);

    // 代码块...
}finally{
	try {  
	    conn.commit();  
	    conn.close();  
	} catch (SQLException e) {  
	    throw new RuntimeException(e);  
	}
}

相关推荐

  1. 使用try-with-resources语法导致BUG

    2024-07-09 21:04:04       28 阅读
  2. try-with-resources

    2024-07-09 21:04:04       21 阅读
  3. Log记录大对象导致CPU异常和磁盘打满

    2024-07-09 21:04:04       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:04:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:04:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:04:04       58 阅读
  4. Python语言-面向对象

    2024-07-09 21:04:04       69 阅读

热门阅读

  1. area_center 区域和区域中心。

    2024-07-09 21:04:04       31 阅读
  2. Linux

    2024-07-09 21:04:04       23 阅读
  3. 从vs中删除自带的Microsoft Git Provider

    2024-07-09 21:04:04       17 阅读
  4. 设计模式的一点理解

    2024-07-09 21:04:04       18 阅读
  5. QT 设置控件的展开和消失

    2024-07-09 21:04:04       22 阅读
  6. qt 读取配置文件

    2024-07-09 21:04:04       21 阅读
  7. 王道考研数据机构:中缀表达式转为后缀表达式

    2024-07-09 21:04:04       30 阅读