1、我们先将数据库连接相关的字段放在配置文件当中:
# .properties文件,#代表注释
#对于mysql的字段
driver=com.mysql.jdbc.Driver
#rewriteBatchedStatements=true 设置批处理
url=jdbc:mysql://localhost:3306/test?useSSL=true&rewriteBatchedStatements=true
user_name=root
user_pwd=123456
2、将连接数据库相关字段放在一个接口当中:
public interface DBHandler {
public static String DRIVER="driver";
public static String USER_NAME="user_name";
public static String USER_PWD="user_pwd";
public static String URL="url";
}
DBUtil封装:
public class DBUtil {
// 对于数据库操作以下字段,不希望在此工具类中进行修改,我们将这些字段的信息放到配置文件中
static String DRIVER = ""; // 数据库加载的驱动
static String USER_NAME = ""; // 数据库用户名
static String USER_PWD = ""; // 密码
static String URL = ""; // 数据库路径
static Properties p = null;
static {
// 对静态成员进行初始化
// 将p与我们的配置文件进行关联
p = new Properties();
try {
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("DBConfig.properties"));
} catch (IOException e) {
e.printStackTrace();
}
// getProperty(key)中的key值不进行传入,因为此处手动输入可能会找不到。我们将字段封装起来
// 另外,如果这些字段值发生改变,我们也不需要更改此类,而是修改DBHandler
DRIVER = getValue(DBHandler.DRIVER);
USER_NAME = getValue(DBHandler.USER_NAME);
USER_PWD = getValue(DBHandler.USER_PWD);
URL = getValue(DBHandler.URL);
// 加载驱动
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/*
* 获取配置文件对应的值
*/
private static String getValue(String key) {
if (key == null || "".equals(key)) {
throw new RuntimeException("传入参数有误");
}
return p.getProperty(key);
}
/**
* 获取连接
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USER_NAME, USER_PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 获取Statement
*
* @param conn
* 数据库连接
* @return
*/
public static Statement getstmt(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
}
/**
* 关闭数据库连接
*
* @param conn
*/
public static void closeConn(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭Statement
* @param stmt
*/
public static void closeStmt(Statement stmt){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭结果集
* @param rs
*/
public static void closeRs(ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭数据库相关的所有资源
* @param conn 数据连接
* @param stmt Statement
* @param rs ResultSet
*/
public static void closeAll(Connection conn,Statement stmt,ResultSet rs){
closeConn(conn);
closeStmt(stmt);
closeRs(rs);
}
}
对于已经封装好的DBUtil进行测试:
public class Test01 {
public static void main(String[] args) throws SQLException {
Connection conn=DBUtil.getConnection();
Statement stmt=DBUtil.getstmt(conn);
String sql="SELECT * FROM USER";
ResultSet rs=null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
while(rs.next()){
System.out.println(rs.getString("uname"));
}
DBUtil.closeAll(conn, stmt, rs);
}
}
注:这些虽然是很基础的知识,但是这样的Demo练习能够提高我们封装的思想,对于不断重复编写的代码应该提取出来进行封装。