当前位置: 首页 > news >正文

JDBC数据库操作中如何保证最后关闭了所占用的资源——try用法的细节控制

JDBC数据库操作中如何保证最后关闭了所占用的资源——try用法的细节控制

在java对数据库的JDBC开发中,往往需要确认最后释放数据库的连接资源,避免连接池被占用。
传统的方法是:
连接数据库后,定义连接和语句,然后执行响应的sql语句,执行完毕后,用close()依次逆序关闭statement语句和连接。经典代码如下:

	Connection connection = null;Statement statement = null;try {Class.forName("com.mysql.cj.jdbc.Driver");connection = DriverManager.getConnection(URL, UNAME, UPASS);statement = connection.createStatement();String sqlString = "insert into ...";//略if (statement.executeUpdate(sqlString) > 0) {System.out.println("插入成功");}}catch (SQLException e) {
....}finally {try {if (statement!=null) statement.close();if (connection!=null) connection.close();		} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}

在JDK8.0以后,只要把所需要关闭的资源在try{}中完成声明,在最后系统会自动依次关闭其中的资源。非常适合用于管理statement、resultRecords等数据库操作中产生的短时资源。
而对于connection,当需要连续操作数据库时,仍然建议放在try之外定义,并手动控制关闭。
代码如下:

		Connection connection = null;try {Statement statement = null;//statement放在try中,结束后会自动关闭Class.forName("com.mysql.cj.jdbc.Driver");connection = DriverManager.getConnection(URL, UNAME, UPASS);statement = connection.createStatement();String sqlString = "insert into ...";//略if (statement.executeUpdate(sqlString) > 0) {System.out.println("插入成功");}...//还可以完成更多的sql操作}catch (SQLException e) {
....}finally {try {if (connection!=null) connection.close();} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}

Connection,也可以放入try{}中声明,将会在执行完毕后,全部由系统自动关闭。
例如:
代码如下:

		try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection = DriverManager.getConnection(URL, UNAME, UPASS);Statement statement = connection.createStatement();//statement放在try中,结束后会自动关闭String sqlString = "insert into ...";//略if (statement.executeUpdate(sqlString) > 0) {System.out.println("插入成功");}...//还可以完成更多的sql操作}catch (SQLException e) {
....}finally {System.out.println("系统关闭全部资源");}

相关文章:

  • 【信息融合】卡尔曼滤波EKF毫米波雷达和红外数据信息融合
  • 参考平面的宽度-信号与电源完整性分析
  • uniapp开发03-轮播图组件swiper的简单使用案例
  • Webpack模块打包工具
  • [计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)
  • 计算机视觉与深度学习 | LSTM原理及与卡尔曼滤波的融合
  • 分享基于时间moment的时间快捷工具
  • Springboot基础篇
  • 物联网安全解决方案介绍:有效利用现有的下一代防火墙
  • Volcano 进阶实战 (二) - (网络拓扑/负载感知)调度
  • 反爬加密字体替换机制解析
  • 人形机器人:开启AI与物理世界交互新时代
  • springboot应用使用shell脚本打包成部署压缩包(支持xjar)
  • spring响应式编程系列:异步生产数据
  • 计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
  • 如何保证线程安全(含典型手段与应用场景)
  • 什么是智能导诊知识库?
  • 平面连杆机构(上)
  • H.264/AVC标准主流开源编解码器编译说明
  • 在分类任务中,显著性分析
  • 2年就过气!ChatGPT催生的百万年薪岗位,大厂不愿意招了
  • 国防部新闻发言人就日本民用飞机侵闯中国钓鱼岛领空答问
  • 2025五一档电影票房破6亿
  • 人民日报今日谈:以青春之我,赴时代之约
  • 巴菲特宣布将于年底退休,“接班人”什么来头?
  • 国家能源局:鼓励各地探索深远海、沙戈荒等可再生能源制氢场景