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();
|
}
|
}
|
}
|
}
|
}
|
}
|