?
要点:
1、类设计
2、单例模式
3、resultSet,Statement,Connection的关闭顺序以及异常捕获
?
1、工具类,不让其他类继承,所以是final;url,password,driver,class等常量信息
2、单例模式,饿汉模式和懒汉模式的区别,双重加锁
(1)单例模式三要素:静态私有的成员变量,私有构造方法,防止外部实例化,公共的获取方法
(2)饿汉模式,饥所以及时加载;懒汉模式,懒所以延迟加载;
3、打开顺序:Connection --> Statement(PreparedStatement) --> Result
关闭顺序: Result --> Statement --> Connection
?
?
package com.zhaoyp.jdbc.util; 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 final String URL = "jdbc:mysql://localhost:3306/jdbc"; private static final String USERNAME = "root"; private static final String PASSWORD = "123"; private static final String DRIVER = "com.mysql.jdbc.Driver"; //延迟加载,需要new的时候才去new //懒汉模式,懒所以延迟加载 //饿汉模式,饿所以及时加载 // private static JdbcUtils instance = new JdbcUtils(); private static JdbcUtils instance = null; private JdbcUtils() { } // public static synchronized JdbcUtils getInstance() { // if(instance == null) { // instance = new JdbcUtils(); // } // return instance; // } //double-check public static JdbcUtils getInstance() { if(instance == null) { //class级别锁 synchronized (JdbcUtils.class) { if(instance == null) { instance = new JdbcUtils(); } } } return instance; } static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USERNAME, PASSWORD); } public static void free(ResultSet rs, Statement st, Connection conn) { try { if(rs!=null && !rs.isClosed()) rs.close(); } catch (Exception e) { System.out.println("异常。。"); } finally { try { if(st != null && !st.isClosed()) st.close(); } catch (Exception e) { System.out.println("st 异常"); } finally { try { if(conn != null && !conn.isClosed()) conn.close(); } catch (Exception e) { System.out.println("conn 异常"); } finally { System.out.println("程序结束"); } } } } }
?