Jdbc使用总结和工具封装(二)
JDBC工具类封装
任务说明:
1. 当前类提供一个对外的公开方法,用户获取数据库连接对象
2. 当前类管理数据库操作过程中的资源关闭过程
3. 以上方法都是工具类方法【static静态】
class JdbcUtil
获取数据库连接对象方法分析
方法名确定:
为了减轻压力,这里使用和JDBC核心API同名方法 getConnection
方法使用:
无参数方法使用更方便,操心的事情更少。方法无参,当前数据库连接使用的必要资源通过其他方式提供。
返回值类型:
java.sql.Connection
方法声明:
public static java.sql.Connection getConnection();
当前方法资源需求分析
因为getConnection是一个static修饰的静态方法,有且只能使用类内的静态资源。数据库连接必要条件:
driverClass jdbcUrl user password 需要通过静态方式来处理。
当前JDBC驱动需要在getConnection方法运行之前准备就绪。
这里需要通过static 修饰的静态代码块来自动加载驱动。
关闭资源方法整合实现
需要进行关闭的资源内容:
1. Connection 数据库连接对象
2. Statement 数据库搬运工对象
3. ResultSet 数据库查询结果集对象
都是 AutoCloseable 接口的子接口,并且close方法规范接口是 AutoCloseable。
类似于:
反射中 AccessibleObject 类内静态方法
setAccessible(AccessibleObject[] arr, boolean flag);
数组可以支持 Field类,Constructor类,Method类
考虑提供给用户三个方法(补充到第四个!!!)
情况1: 关闭数据库连接对象 Connection
public static void close(Connection conn);
情况2: 关闭数据库连接对象 Connection 关闭数据库搬运工对象 Statement
public static void close(Connection conn, Statement st);
情况3: 关闭数据库连接对象 Connection 关闭数据库搬运工对象 Statement 数据库查询结果集对象 ResultSet
public static void close(Connection conn, Statement st, ResultSet rs);
PreparedStatement代码演示
package util;
import java.sql.*;
/**
* JDBC数据库工具类
* 1. 数据库对象获取功能
* 2. 数据库资源关闭功能
*/
public class JdbcUtil {
/*
准备静态成员变量用于保存数据库连接使用的资源内容
*/
private static String driverClass = "com.mysql.jdbc.Driver";
private static String jdbcUrl = "jdbc:mysql://localhost:3306/javaee2011?useSSL=false";
private static String username = "root";
private static String password = "123456";
/*
利用静态代码块在类文件加载阶段一定会执行的特征,自动加载当前数据库连接所需驱动
*/
static {
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* JDBC工具类获取数据连接对象方法。如果用户提供的数据库连接信息有误,返回null
*
* @return java.sql.Connection对象,如果信息有误,返回null
*/
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(jdbcUrl, username, password);
} catch (SQLException e) {
// 后期可以使用日志来记录操作错误情况。
e.printStackTrace();
}
return connection;
}
/**
* 对外提供关闭数据库连接对象方法
*
* @param conn java.sql.Connection数据库连接对象
*/
public static void close(Connection conn) {
close(conn, null, null);
}
/**
* 对外提供关闭数据库和数据库表搬运工对象方法
*
* @param conn java.sql.Connection 数据库连接对象
* @param st java.sql.Statement 数据库搬运工对象
*/
public static void close(Connection conn, Statement st) {
close(conn, st, null);
}
/**
* 对外提供关闭数据库,数据库表搬运工对象以及数据库查询结果集对象方法
*
* @param conn java.sql.Connection 数据库连接对象
* @param st java.sql.Statement 数据库搬运工对象
* @param rs java.sql.ResultSet 数据库查询结果集对象
*/
public static void close(Connection conn, Statement st, ResultSet rs) {
try {
close(rs, st, conn);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 类内私有化静态成员方法,用于提供关闭资源的一个能力
*
* @param res AutoCloseable 接口不定长参数,要求传入的是当前数据库操作对应的数据库资源
* @throws Exception AutoCloseable 接口中close方法抛出异常
*/
private static void close(AutoCloseable... res) throws Exception {
for (AutoCloseable re : res) {
if (re != null) {
re.close();
}
}
}
}
JDBC代码优化
JdbcUtil工具类优化
准备db.properties
# 文件所在位置是src目录下
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/javaee2011?useSSL=false
username=root
password=123456
使用Properties读取配置文件操作
/*
准备静态成员变量用于保存数据库连接使用的资源内容
*/
private static String jdbcUrl;
private static String username;
private static String password;
/*
利用静态代码块在类文件加载阶段一定会执行的特征,自动加载当前数据库连接所需驱动
*/
static {
try {
// 读取Properties属性文件内容
Properties properties = new Properties();
// 加载指定路径的Properties文件对应当前Properties类
properties.load(new FileInputStream("./src/db.properties"));
// 通过 Properties 属性类对象根据Key获取对应的值
jdbcUrl = properties.getProperty("jdbcUrl");
username = properties.getProperty("username");
password = properties.getProperty("password");
Class.forName(properties.getProperty("driverClass"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}