一、概述:
JDBC程序运行后,切记要释放程序在运行过程中,创建的对象比如RessultSet,Statement和Connection。尤其是Connection,是非常稀有的资源,用完后必须马上释放,如果Connectiong释放不及时极易导致系统宕机
二、释放关键点:
1.释放代码一定要放在finally语句中,确保程序就算出现异常也能执行到
2.手动置null,因为调用close()后需要等待垃圾回收,手动置null会加快资源释放速度
三、示例代码
package jdbc;
import org.junit.jupiter.api.Test;
import java.sql.*;
/**
* @author created by jackie on 2020-4-20
* @description: 释放资源
*/
public class jdbcTest2 {
@Test
public void jdbcDemo1(){
Connection conn = null ;
Statement stmt = null ;
ResultSet rs = null ;
try {
//一、加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//加载类文件,通过静态代码执行注册驱动
//二、获得连接
Connection conn= DriverManager.getConnection("jdbc:mysql://ip:端口号/数据库名","登录账号","登录密码");
String sql ="select *from jdbc";
//三、创建执行SQL语句的对象,执行SQL
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
int uid =rs.getInt("uid");
String username =rs.getString("username");
String password =rs.getString("password");
String realname = rs.getString("realname");
System.out.println(uid+" "+username+" "+password+" "+realname);
}
} catch (ClassNotFoundException e){
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{ //四、释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
// ignore
}
rs = null ;//上面close()調用后需要等待垃圾回收,手動置空會更快釋放
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException ex) {
// ignore
}
stmt = null ;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
// ignore
}
conn = null ;
}
}
}
}
备注:
相关demo可以在mysql官方帮助文档中查询到,可以自行网上下载,找不到可以留言写下邮箱,博主看到会发过去