当前位置: 首页 > 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("系统关闭全部资源");}
http://www.xdnf.cn/news/154171.html

相关文章:

  • k8s中资源的介绍及标准资源namespaces实践
  • 如何在 Conda 环境中降级 Python 版本:详细指南
  • H.264/AVC标准主流开源编解码器编译说明
  • 2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
  • MyBatis缓存配置的完整示例,包含一级缓存、二级缓存、自定义缓存策略等核心场景,并附详细注释和总结表格
  • Prometheus、Zabbix和Nagios针对100个节点的部署设计架构图
  • PyTabKit:比sklearn更强大的表格数据机器学习框架
  • 性能提升手段--池化技术
  • 机器学习之一:机械式学习
  • 【学习笔记】检索增强生成(RAG)技术
  • flutter 引擎初始化
  • React Router v7 从入门到精通指南
  • Android学习总结之ANR问题
  • 学习笔记:Qlib 量化投资平台框架 — GETTING STARTED
  • 【SpringBoot】WebConfig 跨域配置详细说明
  • 聊聊Spring AI Alibaba的YuQueDocumentReader
  • [Lc day] 滑动窗口 | hash | 前缀和 | 维护区间最值子数组
  • JSP实现用户登录注册系统(三天内自动登录)
  • ASAM MDF 文件格式简介:测量数据的标准化存储
  • 【漫话机器学习系列】225.张量(Tensors)
  • 【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现
  • 【Android】四大组件之Service
  • WPF实现多语言切换
  • ubantu18.04(Hadoop3.1.3)之Spark安装和编程实践
  • 设计一个关键字统计程序:利用HashMap存储关键字统计信息,对用户输入的关键字进行个数统计。
  • Spring Boot 3.4.5 运行环境需求
  • k8s学习记录(四):节点亲和性
  • 经典题型02——python
  • WebSocket + Protobuf 高性能游戏服务端实现
  • 零基础上手Python数据分析 (24):Scikit-learn 机器学习初步 - 让数据预测未来!