自定義的jdbc連接工具類JDBCUtils【java 工具類】


JDBCUtils 類設計:

  1. 創建私有的屬性*(連接數據庫必要的四個變量):dreiver url user password

  2. 將構造函數私有化

  3.將注冊驅動寫入靜態代碼塊

  4.外界只能通過調用本工具的靜態方法 getConnectio() 獲取數據庫連接,讓調用者處理異常(拋出異常)

  5. 資源關閉采用也采用靜態方法調用

  升級版:使用 properties 配置文件進行數據庫連接配置見下文工具二

JDBCUtils 代碼實現:

package com.test.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public final class JDBCUtils {
    private static String driver="com.mysql.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/store28";
    private static String user="root";
    private static String password="root1234";
    
    private JDBCUtils(){}
    
    static {
        /**
         * 驅動注冊
         */
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
        
    }
    
    /**
     * 獲取 Connetion
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, user, password);
    }
    
    /**
     * 釋放資源
     * @param conn
     * @param st
     * @param rs
     */
    public static void colseResource(Connection conn,Statement st,ResultSet rs) {
        closeResultSet(rs);
        closeStatement(st);
        closeConnection(conn);
    }
    
    /**
     * 釋放連接 Connection
     * @param conn
     */
    public static void closeConnection(Connection conn) {
        if(conn !=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        conn = null;
    }
    
    /**
     * 釋放語句執行者 Statement
     * @param st
     */
    public static void closeStatement(Statement st) {
        if(st !=null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        st = null;
    }
    
    /**
     * 釋放結果集 ResultSet
     * @param rs
     */
    public static void closeResultSet(ResultSet rs) {
        if(rs !=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        rs = null;
    }
}

工具一測試:

package com.test.jdbcTest;

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.junit.Test; import com.test.utils.JDBCUtils; public class JdbcTest { @Test public void add() { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { // 獲取連接 conn = JDBCUtils.getConnection(); // 編寫sql String sql = "insert into category values (?,?)"; // 創建語句執行者 st= conn.prepareStatement(sql); //設置參數 st.setString(1, "10"); st.setString(2, "測試目錄"); // 執行sql int i = st.executeUpdate(); if(i==1) { System.out.println("數據添加成功!"); }else { System.out.println("數據添加失敗!"); } } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.colseResource(conn, st, rs); } } }

 

工具類二(升級版):

使用 eclipse 在 src 目錄下創建 jdbc.properties 文件,寫入健值對:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/store28
user=root
password=root1234

 

 

package com.test.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public final class JDBCUtilsPlus {
    private static final String DRIVER;
    private static final String URL;
    private static final String USER;
    private static final String PASSWORD;
    
    private JDBCUtilsPlus(){}
    
    static {
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        
        DRIVER = bundle.getString("driver");
        URL = bundle.getString("url");
        USER = bundle.getString("user");
        PASSWORD = bundle.getString("password");
        
        /**
         * 驅動注冊
         */
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
    
    /**
     * 獲取 Connetion
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
    
    /**
     * 釋放資源
     * @param conn
     * @param st
     * @param rs
     */
    public static void colseResource(Connection conn,Statement st,ResultSet rs) {
        closeResultSet(rs);
        closeStatement(st);
        closeConnection(conn);
    }
    
    /**
     * 釋放連接 Connection
     * @param conn
     */
    public static void closeConnection(Connection conn) {
        if(conn !=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        conn = null;
    }
    
    /**
     * 釋放語句執行者 Statement
     * @param st
     */
    public static void closeStatement(Statement st) {
        if(st !=null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        st = null;
    }
    
    /**
     * 釋放結果集 ResultSet
     * @param rs
     */
    public static void closeResultSet(ResultSet rs) {
        if(rs !=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //等待垃圾回收
        rs = null;
    }
}

工具測試:

package com.test.jdbcTest;

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

import org.junit.Test;

import com.test.utils.JDBCUtils;
import com.test.utils.JDBCUtilsPlus;

public class JdbcTest {
    @Test
    public void select() {
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        
        try {
            // 獲取連接
            conn = JDBCUtilsPlus.getConnection();
            
            // 編寫sql
            String sql = "select * from category";
            
            // 創建語句執行者
            st= conn.prepareStatement(sql);
            
            rs = st.executeQuery();
            
            while(rs.next()) {
                System.out.println(rs.getString(1)+"..."+rs.getString(2));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtilsPlus.colseResource(conn, st, rs);
        }
        
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM