JDBC单例模式

  1. JdbcUtilsSingle 工具类
package com.chinasofti.jdbc;

import java.sql.*;

/**
 * Created by yvettee on 2017/9/17.
 */
public class JdbcUtilsSingle {

    private String url = "jdbc:oracle:thin:@localhost:1521:XE";
    private String user = "scott";
    private String password = "tiger";

    private static JdbcUtilsSingle instance = null;

    private JdbcUtilsSingle() {

    }

    //懒汉式
    public static JdbcUtilsSingle getInstance() {
        if (instance == null) {
            //可能会有并发问题,要进行加锁
            synchronized (JdbcUtilsSingle.class) {
                //双重检查,第一次访问加锁,以后instance都不会为null,就直接返回instance
                if (instance == null) {
                    instance = new JdbcUtilsSingle();
                }
            }
        }
        return instance;
    }

    //注册驱动
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }

    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }

    public void release(Connection conn, Statement st, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;//如果rs没有被关闭,就置为空,变成一个垃圾对象,被垃圾回收器回收
        }
        if (st != null) {
            try {
                st.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            st = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 实现
package com.chinasofti.jdbc;

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

/**
 * Created by yvettee on 2017/9/17.
 */
public class Base {
    public static void main(String[] args) throws Exception {
        template();
    }

    static void template() throws Exception {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtilsSingle.getInstance().getConnection();
            st = conn.createStatement();
            String sql = "select * from emp";
            rs = st.executeQuery(sql);

            while (rs.next()) {
                System.out.println(rs.getInt(1) + rs.getString(2));
            }
        } finally {
            JdbcUtilsSingle.getInstance().release(conn, st, rs);
        }
    }
}

你可能感兴趣的:(JDBC单例模式)