package com.ard.work.utils.data; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Conn { //创建一个对象 设置为静态私有 (单例模式) private static Conn gc = null; //将构造函数设为private型 防止外部实例化对象 (通过反射或反序列化可以破解单例) private Conn(){}; //静态代码块,在类加载进内存时就完成对对象的特殊的初始化(这个动作发生在类的构造器执行之前,也就是在没有对象存在的情况下,静态代码就已经完成了对对象的特殊的处理 ),此处的作用是,当jdbc的驱动器加载时,就自动创建一个自己。 static{ try { //注册驱动 Class.forName("oracle.jdbc.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //判断GetConn实例化的对象是否存在 不存在就实例化一个 //synchronized 线程锁 防止多个线程抢占资源 防止死锁 public static Conn getGc(){ if(gc==null){ synchronized (Conn.class) { if(gc==null){ gc=new Conn(); } } } return gc; } //返回一个Connection连接 public Connection getCon(String url,String user,String pwd) throws SQLException { return DriverManager.getConnection(url, user, pwd); } //释放资源 public void closeAll(ResultSet rs, Statement st, Connection con){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(st!=null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } } if(st!=null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } }