当前位置: 首页 > 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标准主流开源编解码器编译说明
  • 在分类任务中,显著性分析
  • 9米长林肯车开进安徽“皖南川藏线”致拥堵数小时,车主回应争议称配合调查
  • 中青报:“爸妈替我在线相亲”,助力还是越界?
  • 巴菲特执掌60年,伯克希尔市值如何增长5.5万倍?详解五大经典投资案例
  • 赵厚均评《唐诗与唐代园林景观的审美建构研究》|林泉恣探历,风景暂徘徊
  • 澎湃读报丨央媒头版头条集中刊发:大国应有的样子
  • 零食连锁鸣鸣很忙递表港交所:去年营收393亿元,门店超1.4万家,净利润率2.1%