| package com.ruoyi.utils.data; | 
|   | 
| import java.sql.*; | 
|   | 
| public class Conn { | 
|     //jdbc连接需要用到的三个参数 | 
|     private String url="jdbc:oracle:thin:@112.98.126.2:21521:orcl"; | 
|     private String user="c##ard_user"; | 
|     private String pwd="123456"; | 
|   | 
|     //创建一个对象 设置为静态私有  (单例模式) | 
|     private static Conn gc=null; | 
|   | 
|     //将构造函数设为private型 防止外部实例化对象  (通过反射或反序列化可以破解单例) | 
|     private Conn(){}; | 
|   | 
|     //静态代码块,在类加载进内存时就完成对对象的特殊的初始化(这个动作发生在类的构造器执行之前,也就是在没有对象存在的情况下,静态代码就已经完成了对对象的特殊的处理 ),此处的作用是,当jdbc的驱动器加载时,就自动创建一个自己。 | 
|     static{ | 
|         try { | 
|             //注册驱动 | 
|             Class.forName("oracle.jdbc.OracleDriver"); | 
|         } catch (ClassNotFoundException e) { | 
|             // TODO Auto-generated catch block | 
|             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() 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) { | 
|                 // TODO Auto-generated catch block | 
|                 e.printStackTrace(); | 
|             }finally{ | 
|                 if(st!=null){ | 
|                     try { | 
|                         st.close(); | 
|                     } catch (SQLException e) { | 
|                         // TODO Auto-generated catch block | 
|                         e.printStackTrace(); | 
|                     }finally{ | 
|                         if(con!=null){ | 
|                             try { | 
|                                 con.close(); | 
|                             } catch (SQLException e) { | 
|                                 // TODO Auto-generated catch block | 
|                                 e.printStackTrace(); | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         if(st!=null){ | 
|             try { | 
|                 st.close(); | 
|             } catch (SQLException e) { | 
|                 // TODO Auto-generated catch block | 
|                 e.printStackTrace(); | 
|             }finally{ | 
|                 if(con!=null){ | 
|                     try { | 
|                         con.close(); | 
|                     } catch (SQLException e) { | 
|                         // TODO Auto-generated catch block | 
|                         e.printStackTrace(); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
| } |