在上一篇笔记里,说到每一次使用数据库都要注册驱动,获取链接,释放资源,这样很麻烦,我们应该将注意力集中在sql代码上,而不是这些重复的代码,所以我们写一个JDBCUtils工具类,来抽取驱动注册,获取链接方法,释放资源方法。
达到这样的效果:注册驱动只需要这样一句话
Connection conn=JDBCUtils.getConnection();
下面来完成JDBCUtils:
public static Connection getConnection(){
return DriverManager.getConnection(url,user,password)
//1.获取连接,返回的肯定是一个连接对象,
//2.工具类的方法一般都是静态的,方便调用
//这样写显然现在是不对的,每次用这个方法都要在里面该url,user,pwd
}
所以我们写一个配置文件jdbc.properties,将来只用读取配置文件就可以了,这个配置文件我们一般放在src下
jdbc.properties
url=jdbc:mysql:///数据库名;
user=用户名;
password=密码;
driver=com.mysql.jdbc.Driver;
再绕就绕晕了,下面不多bb,直接把JDBCUtils写出来
public class JDBCUtils{
//读取文件配置,只需读取一次,就可以拿到这些值,使用静态代码块
//静态代码块会随着类的加载而加载,只会加载一次
//所以我们还可以在这里注册驱动
static{
properties pro = new Properties();
pro.load(new FileReader("src/jdbc.properties"));//后面会补充一个更好的读取配置文件的方式
url=pro.getProperty("url");//键名要和配置文件中的键名一致
user=pro.getProperty("user");
password=pro.getProperty("password");
driver=pro.getPreperty("driver");
Class.forName(driver);//注册驱动
}
//获取连接
public static Connection getConnection(){
return DriverManager.getConnection(url,user,password);
}
//释放资源
public static void close(Statement stmt,Connection conn){
if(stmt!=null){
stmt.close();//这里会有一个异常try/catch一下就好;
}
if(conn!=null){
conn.close();
}
}
//执行DML时需要stmt,conn
//执行DQL时需要rs,stmt,conn,所以要写两种close
public static void close(Statement stmt,Connection conn){
if(stmt!=null){
stmt.close();//这里会有一个异常try/catch一下就好;
}
if(conn!=null){
conn.close();
}
}
}
然后JDBCUtils就可以用了,但是要补充一点,在static里,难道我们每次使用JDBCUtils都要打开这个文件,然后写一下加载路径吗?显然我们不想这样,所以我们通过ClassLoader类加载器加载
ClassLoader classLoader=JDBCUtils.Class.getClassLoader();
URL res=classLoader.getResource("jdbc.properties");
String path=res.getPath();
//z之前我们写的pro.load(new FileReader("src/jdbc.properties"));
//就可以改为
pro.load(new FileReader(path);
这样工具类就写完了,可以很好的使用了
今后我们获取连接
Connection conn=JDBCUtils.getConnection();
释放资源
JDBCUtils.close(rs,stmt,conn);