对jdbc的注册驱动和资源释放等代码进行封装
由于每回都需要重复写代码,为了提高复用性。我们写一个jdbc工具类。下次在进行驱动和释放资源时可以直接调用工具类中的 方法。
package com.atguigu.DBUtil;
import java.sql.*;
/**
* jdbc工具类
**/
public class DBUtil {
//因为注册只需要进行一次,所以写在静态代码块中,当类加载的时候进行调用且只会调用一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/*
工具类的构造方法都是私有的
因为工具类不需要new对象。里面方法都是静态的,直接采用类名调用
*/
private DBUtil(){};
/**
* 获取数据库连接对象
* @return 连接对象
* @throws SQLException
* 在这里需要标注数据库、用户名和密码
* 这里采用mysql数据库的url作为例子
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx","xxx","xxx");
}
/**
* 关闭资源
* @param connection 连接对象
* @param ps
* @param rs
*/
public static void close(Connection connection, Statement ps, ResultSet rs){
if(rs !=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps !=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection !=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
下面我们对自己写的工具类进行测试
这里我们采用sql中的模糊查询作为例子对其进行测试
package com.atguigu.homework;
import com.atguigu.DBUtil.DBUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 模糊查询
* 测试DBUtil是否好用
**/
public class Test13 {
@Test
public void testSelect(){
Connection connection =null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
//获取连接
connection = DBUtil.getConnection();
ps=connection.prepareStatement("select * from t_user where username like ?");
//在这里模糊查询的条件需要用占位符的方式写进去,这里查询用户名中带有d的人
ps.setString(1,"%d%");
rs=ps.executeQuery();
while(rs.next()){
//这里获得年龄来测试是否运行成功
System.out.println(rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//释放资源
DBUtil.close(connection,ps,rs);
}
}
}
可以成功得出结果,即工具类可以正常使用。
注意:需要导入三个jar包