小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
目的
简化书写
分析
1.注册驱动也抽取
2.抽取一个方法获取连接对象
需求:不想传递参数(麻烦),还带保证工具类的通用新
解决:properties配置文件
url=jdbc:mysql:///db2
user=root
password=root
driver=com.mysql.jdbc.Driver
抽取一个方法释放资源
package cn.caq.utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
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();
//获取src路径下的文件方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCutils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");//得到文件的绝对路径
String path = res.getPath();//将绝对路径转化为字符串形式
//FileReader用来读用户本地的文件
pro.load(new FileReader(path));
//2.加载文件
//pro.load(new FileReader("src/jdbc.properties"));
//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();
}
}
/**
* 获取连接的方法
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源的方法
*/
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
使用工具类
package cn.caq.jdbc;
import cn.caq.domain.Emp;
import cn.caq.utils.JDBCutils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class JdbcDemo07 {
public static void main(String[] args) {
List<Emp> list = new JdbcDemo07().findall2();
System.out.println(list);
}
/**
* 演示JDBC工具类
*/
public List<Emp> findall2() {
Connection conn = null;
Statement stmt = null;
ResultSet res = null;
ArrayList<Emp> list = null;
try {
// //1.注册驱动
// Class.forName("com.mysql.jdbc.Driver");
// //2.获取连接对象
// conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "root");
conn = JDBCutils.getConnection();
//3.定义sql
String sql = "select * from emp";
//4.获取执行sql对象
stmt = conn.createStatement();
//5.执行sql
res = stmt.executeQuery(sql);
//6.处理结果
Emp emp = null;
list = new ArrayList<>();
while (res.next()) {
int id = res.getInt("id");
String ename = res.getString("ename");
int job_id = res.getInt("job_id");
//创建emp对象,并赋值
emp = new Emp();
emp.setId(id);
emp.setEname(ename);
emp.setJob_id(job_id);
//装载集合
list.add(emp);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCutils.close(res,stmt,conn);
}
return list;
}
}
通过工具类能简化代码的书写,也利用了封装的思想 将重复的代码整个到一个类中,使用的时候直接调用即可不用重复书写