1. 程式人生 > 其它 >JDBC_06封裝JDBC工具類

JDBC_06封裝JDBC工具類

JDBC_06封裝JDBC工具類

1.有哪些程式碼可以封裝進工具類

分析如下jdbc程式:

package com.tsccg.jdbc.util;

import java.sql.*;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 13:00
 * 工具類抽離模板
 */
public class JdbcTest01 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連線
            String url = "jdbc:mysql://localhost:3306/tsccg";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url,user,password);
            //3.獲取預編譯資料庫操作物件
            String sql = "select ename from emp where ename like ?";
            ps = conn.prepareStatement(sql);
            //給佔位符賦值
            ps.setString(1,"__A%");
            //4.執行sql語句
            rs = ps.executeQuery();
            //5.處理查詢結果集
            while (rs.next()) {
                System.out.println(rs.getString("ename"));
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //6.釋放資源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}

縱觀整個程式,我們可以發現第3、5步的程式碼是不固定的,而第4步的程式碼只有一行,即使封裝進工具類中,使用時也要用一行程式碼呼叫。

所以,我們可以將1、2、6這三步比較固定且冗餘的程式碼封裝進工具類中。

2.實現工具類

package com.tsccg.jdbc.util;

import java.sql.*;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 12:57
 * jdbc工具類
 */
public class JdbcUtil {
    /**
     * 工具類中的方法都是靜態的,不需要new物件,直接用類名呼叫
     * 所以可將構造方法設為私有的,這是模仿在原始碼裡的工具類中構造方法的寫法
     */
    private JdbcUtil() {
    }
    //1.註冊驅動
    //註冊驅動只需要執行一次,可放進靜態程式碼塊中。
    //只要一呼叫工具類,就會呼叫工具類的構造方法,隨之就會載入靜態程式碼塊中的內容
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 2.獲取連線物件
     * @return 資料庫連線物件
     * @throws SQLException 上拋SQL異常
     */
    public static Connection connect() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/tsccg";
        String user = "root";
        String password = "123456";
        return DriverManager.getConnection(url,user,password);
    }

    /**
     * 6.關閉資源
     * @param rs 查詢結果集
     * @param stmt 可操作資料庫物件
     * @param conn 連線物件
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

3.測試工具類

先使用工具類改造前面的程式

package com.tsccg.jdbc.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 13:19
 * 實現模糊查詢
 * 使用jdbc工具類
 */
public class JdbcLikeDemo01 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.註冊、2.獲取連線
            conn = JdbcUtil.connect();
            //3.獲取預編譯的資料庫操作物件
            String sql = "select ename from emp where ename like ?";
            ps = conn.prepareStatement(sql);
            //查詢第三個字母為A的員工名字
            ps.setString(1,"__A%");
            //4.執行sql語句
            rs = ps.executeQuery();
            //5.處理查詢結果集
            while (rs.next()) {
                System.out.println(rs.getString("ename"));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6.關閉資源
            JdbcUtil.close(conn,ps,rs);
        }
    }
}

結果:

BLAKE
CLARK
ADAMS