1. 程式人生 > >單例模式建立工具類

單例模式建立工具類

/*
 * 
 *JdbcUtilsSing.java
 *
 * 這是一個工具類,一般工具類不能被繼承,定義成final
 * 不需要構造例項,用私有的構造方法
 * 單例模式或者用static靜態程式碼塊,本例用單例模式
 * 
 * */
package cn.itcast.jdbc;

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

public final
class JdbcUtilsSing { private static String url = "jdbc:mysql://localhost:3306/jdbc"; private static String user = "root"; private static String password = "123456"; private static JdbcUtilsSing instance = null; private JdbcUtilsSing() { } public static JdbcUtilsSing getInstance
() { if (instance == null) { // 延遲載入 synchronized (JdbcUtilsSing.class) { // 同步鎖 if (instance == null) instance = new JdbcUtilsSing(); } } return instance; } // 註冊驅動 static { try { Class.forName("com.mysql.jdbc.Driver"
); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } public Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } public void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }

使用這個類

package cn.itcast.jdbc;

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

public class Base {

    public static void main(String[] args) {
        try {
            template();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static void template() throws Exception {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            // 2.建立連線
            conn = JdbcUtilsSing.getInstance().getConnection();

            // 3.建立語句
            st = conn.createStatement();

            // 4.執行語句
            rs = st.executeQuery("select * from user");

            // 5.處理結果
            while (rs.next()) {
                System.out.println("id:" + rs.getObject(1) + "\tname:"
                        + rs.getObject(2) + "\tbirthday:" + rs.getObject(3)
                        + "\tmoney:" + rs.getObject(4));
            }

            // 6.釋放資源
        } finally {
            JdbcUtilsSing.getInstance().free(rs,st,conn);
        }
    }
}

比起static程式碼的方式稍微麻煩一點