版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014565127/article/details/89006985
JDBC工具类创建
1. 资源释放工作的整合
JDBCUtil.release(conn, st, rs);
将ResultSet、Statement、Connection的释放放在一个类里。
public class JDBCUtil {
/**
* 释放资源
*
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn, Statement st, ResultSet rs) {
closeRs(rs);
closeSt(st);
closeConn(conn);
}
// 释放ResultSet对象
private static void closeRs(ResultSet rs) {
System.out.println("释放ResultSet对象");
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
// 释放Statement对象
private static void closeSt(Statement st) {
System.out.println("释放Statement对象。");
try {
if (st != null) {
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
st = null;
}
}
// 释放数据库连接。
private static void closeConn(Connection conn) {
System.out.println("释放数据库连接。");
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
2. 驱动防二次注册
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Driver这个类里面有静态代码块,一上来就执行了驱动的注册,所以等同于我们注册了两次驱动,其实没这个必要。
参照文档,最后形成以下代码即可:
Class.forName("com.mysql.jdbc.Driver");
3. 建立连接
把建立连接的部分放入一个类。初步整合起来。
public class JDBCUtil {
static String url = "jdbc:mysql://localhost/factory";
static String user = "root";
static String passwd = "0000";
/**
* 建立连接。
*
* @return
*/
public static Connection getConn() {
registerDriver();
Connection conn = null;
try {
// 2. 建立连接 参数1:协议+访问数据库 参数2:用户名 参数3:密码
conn = DriverManager.getConnection(url, user, passwd);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 注册驱动
*/
public static void registerDriver() {
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
这样做只是初步进行了整合,我们接下来还要对上述代码进行修改。
4. 使用properties配置文件
现在发现使用JDBC进行连接的各种属性是直接放在代码里的,我们为了方便维护和修改,我们把这些信息都保存在一个文件中,在程序中去读取这个文件,这样以后修改相关信息的时候就直接修改文件就可以了,而不用去代码翻来翻去。
创建properties
在src下声明一个文件jdbc.properties
,内容如下:
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/TABLE
user=username
passwd=password
读取properties
在工具类里面,使用静态代码块,读取属性。
改写上面的部分代码。
static String driverClass = null;
static String url = null;
static String user = null;
static String passwd = null;
static {
try {
// 1. 创建一个属性配置对象
Properties properties = new Properties();
// 2. 把properties文件转化为inputstream流
//方法一:如果把properties文件放在工程的根目录下,可以使用下面的语句读取这个文件
//InputStream is = new FileInputStream("jdbc.properties");
//方法二:使用类加载器,去读取src目录下的资源文件
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 3. 导入输入流。
properties.load(is);
// 4. 读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
user = properties.getProperty("user");
passwd = properties.getProperty("passwd");
} catch (Exception e) {
e.printStackTrace();
}
}
在后面注册驱动的时候,参数直接使用上面建立好的driverClass就可以了。
/**
* 注册驱动
*/
public static void registerDriver() {
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
注册驱动的小细节
我们尝试注释掉注册驱动的语句:
//Class.forName(driverClass);
重新运行程序,发现没有任何问题。那么原因是什么呢,我们看一下
大意就是4.0版本之后不需要使用Class.forName();
语句注册了,它会自动帮我们注册驱动。
总结
我们把JDBC用的一些代码进行整合复用,形成JDBC工具类。主要是资源释放工作的整合,以及驱动的防二次注册,还把建立连接的过程封装起来,并使用properties读取属性,方便以后的维护。