抽取JDBC工具类:JDBCUtils
目的:简化书写
分析:1.注册驱动也要抽取
2.抽取一个方法用于获取连接对象
需求:不想传参(太麻烦),又想保证工具类的通用性
解决:配置文件jdbc.properties(在src下)
3.抽取一个方法用于释放资源
jdbc.properties配置文件
需要改这几个参数时直接在配置文件里修改就可以了,而不需要在代码里修改
url=jdbc:mysql:///school?serverTimezone=UTC
user=root
password=123456
driver=com.mysql.cj.jdbc.Driver
JDBCUtils工具类
public class JDBCUtils
{
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件只读取一次即可得到这些值:使用静态代码块
*/
static
{
//读取资源文件,获取值。
try {
//1.创建Properties集合类
Properties pro = new Properties();
//2.加载文件,可以动态获取
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader cl = JDBCUtils.class.getClassLoader();
URL res = cl.getResource("jdbc.properties");
String path = res.getPath();
pro.load(new FileReader(path));
//3.获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4.注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException
{
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt, Connection conn)
{
if(stmt != null)
{
try {
stmt.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if(conn != null)
{
try {
conn.close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
/**
* 重载上面的close函数,增加一个ResultSet参数
* @param rs
* @param stmt
* @param conn
*/
public static void close(ResultSet rs, Statement stmt, Connection conn)
{
if(rs != null)
{
try {
rs.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if(stmt != null)
{
try {
stmt.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if(conn != null)
{
try {
conn.close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
}
这样,在注册驱动、获取连接以及释放资源时会变得十分简单
//1.注册驱动
//2.获取连接
conn = JDBCUtils.getConnection();
//7.释放资源
JDBCUtils.close(rs, stmt, conn);