package util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
/**
* 較為繁瑣並且存在【通用性代碼】
* 1. 數據庫連接的過程
* 驅動加載,必要參數和獲取數據庫連接
* 2. 數據庫操作使用的資源關閉問題
* <p>
* JDBCUtil這個工具類能夠給我們提供什么便利
* 1. 自動加載驅動,預處理所有的必要參數
* 2. 簡化獲取數據庫連接的方法,改為getConnection();
* 3. 簡化關閉數據庫連接使用的資源,改為統一的close方法
* 4. 所有的方法都是通過類名直接調用,擺脫類對象約束,使用static修飾的靜態成員方法
*
* @author Anonymous
*/
public class JdbcUtil {
// 數據庫連接所需的必要條件
private static String url = null;
private static String user = null;
private static String password = null;
// 使用靜態代碼塊完成自動加載,輔助程序運行的必要參數
static {
try {
// 1. 准備當前db.properties輸入字節流對象
FileInputStream fis = new FileInputStream(new File("./src/db.properties"));
// 2. 獲取一個Properties類對象
Properties properties = new Properties();
// 3. 使用load方法,獲取db.properties文件內容到Properties類對象
properties.load(fis);
// 4. 通過Properties類對象,獲取對應的屬性
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
Class.forName(properties.getProperty("driverClass"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 靜態成員方法,獲取對應數據庫的java.sql.Connection連接對象
*
* @return java.sql.Connection 數據庫連接對象,如果發生意外返回null
*/
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 關閉數據庫Connection連接對象
*
* @param connection java.sql.Connection 數據庫連接對象
*/
public static void close(Connection connection) {
close(connection, null, null);
}
/**
* 關閉數據庫Connection連接對象,以及Statement數據庫SQL語句搬運工對象
*
* @param connection java.sql.Connection 數據庫連接對象
* @param statement java.sql.Statement 數據庫SQL語句搬運工對象
*/
public static void close(Connection connection, Statement statement) {
close(connection, statement, null);
}
/**
* 關閉數據庫Connection連接對象,Statement數據庫SQL語句搬運工對象以及查詢結果集對象ResultSet
*
* @param connection java.sql.Connection 數據庫連接對象
* @param statement java.sql.Statement 數據庫SQL語句搬運工對象
* @param resultSet java.sql.ResultSet 查詢結果集類對象
*/
public static void close(Connection connection, Statement statement, ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}