JDBC学习:工具集
大量冗余的代码需要被简化,可以写好一个个工具集,将驱动的注册、连接的建立、资源的释放统一放入其中,需要时调用即可
写一遍,用n次
1、驱动的注册和连接的建立
代码是死的,想要建立不同的连接,要直接对代码动刀,不合适。这种叫做硬编码;修改为传参后拼接字符串再连接,倒还合适
更优的方案:选择加载配置文件的方式,需要时加载,修改时只需修改配置文件的内容,无需修改代码
配置文件内容:
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test2
user = root
password = root
配置文件加载:
若是每次新建连接,都要加载一次配置文件,就过于低效了
选择静态代码块static,在类加载进入内存时就被启动的代码。只需加载运行一次,常驻
static {
Properties pro = new Properties();
//配置信息对象
ClassLoader classLoader = JDBC_TEST.class.getClassLoader();
URL res = classLoader.getResource("pro.properties");
String path = res.getPath();
//首先,采用classloader来获取当前类的类加载器,然后通过类加载器的getResource获取当前类所属的src目录下的某个指定名字的文件的资源,返回的是一个URL
//再通过资源的getPath获取该文件的绝对路径。但是注意,即便如此,存放project的路径中也绝对不允许出现中文
//建议配合两篇文章阅读:
https://blog.csdn.net/sinat_27535209/article/details/52984321
https://blog.csdn.net/xu_joy/article/details/55049620
try {
pro.load(new FileReader(path));
//通过路径加载配置信息
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
Class.forName(pro.getProperty("driver"));
//通过指定键获取配置信息中的值
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
2、释放资源的工具类:
public static void close(ResultSet rs, Statement stmt, Connection con){
if(rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
其实就是把原本finally中的代码挪到了另一个类的公共静态方法中,且注意:方法有时候不需要三个参数,resultset有时可能没有,因此要进行重载,写一个两参数的版本

浙公网安备 33010602011771号