首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JDBC 資料庫連線工具類完整實作範例

     編輯:程式設計綜合問答

原始碼問題

提供的 ConnDB 類別僅有骨架,關鍵方法如 getStatement、getResultSet、關閉資源等皆為空實作,無法直接使用。

完整可用的 JDBC 工具類範例

以下展示一個支援連線池、事務控制、參數化查詢、結果映射的完整實作(節錄自實際專案):

public class DBSchema implements DBAction {
    private DBInfo info;
    private Connection connection;
    private PreparedStatement statement;
    private ResultSet resultset;
    private Logger logger = Logger.getLogger(DBSchema.class);

    // 開啟事務
    public void openTransaction() throws Exception {
        Class.forName(info.getDriver());
        connection = DriverManager.getConnection(info.getUrl(), info.getUser(), info.getPassword());
        connection.setAutoCommit(false);
    }

    // 提交/回滾
    public void commitTransaction() throws Exception { connection.commit(); close(); }
    public void rollbackTransaction() throws Exception { connection.rollback(); close(); }

    // 參數化查詢回傳 List
    public List> queryList(String sql, String[] params) throws Exception {
        List> list = new ArrayList<>();
        statement = connection.prepareStatement(sql);
        if (params != null) for (int i = 0; i < params.length; i++) statement.setObject(i + 1, params[i]);
        resultset = statement.executeQuery();
        ResultSetMetaData rsmd = statement.getMetaData();
        int cols = rsmd.getColumnCount();
        while (resultset.next()) {
            Map map = new HashMap<>();
            for (int i = 1; i <= cols; i++)
                map.put(rsmd.getColumnName(i).toUpperCase(), trackValue(resultset.getObject(i)));
            list.add(map);
        }
        closeQueryResources();
        return list;
    }

    // 更新/插入/刪除
    public int excuteUpdate(String sql, String[] params) throws Exception {
        statement = connection.prepareStatement(sql);
        if (params != null) for (int i = 0; i < params.length; i++) statement.setObject(i + 1, params[i]);
        int count = statement.executeUpdate();
        statement.close();
        return count;
    }

    // 關閉資源輔助方法
    private void closeQueryResources() { ... }
    private String trackValue(Object obj) { ... }
}

關鍵改進點

  • 使用 PreparedStatement 防 SQL 注入。
  • 統一資源關閉邏輯,避免洩漏。
  • 提供事務控制、分頁查詢、批次操作等高階功能。
  • 整合 Log4j 記錄 SQL 及參數,利於除錯。

建議

實際專案建議採用成熟框架(如 HikariCP + MyBatis/JdbcTemplate),減少自行造輪子的維護成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved