使用单例模式实现jdbc连接

package conn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class GetConn {
	//jdbc连接需要用到的三个参数
	private String url="jdbc:mysql://localhost:3308/cmr";
	private String user="root";
	private String pwd="";
	
	//创建一个对象 设置为静态私有  (单例模式)
	private static GetConn gc=null;
	
	//将构造函数设为private型 防止外部实例化对象  (通过反射或反序列化可以破解单例)
	private GetConn(){};
	
	//静态代码块,在类加载进内存时就完成对对象的特殊的初始化(这个动作发生在类的构造器执行之前,也就是在没有对象存在的情况下,静态代码就已经完成了对对象的特殊的处理 ),此处的作用是,当jdbc的驱动器加载时,就自动创建一个自己。
	static{
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

	//判断GetConn实例化的对象是否存在  不存在就实例化一个
	//synchronized  线程锁  防止多个线程抢占资源   防止死锁
	public static GetConn getGc(){
		if(gc==null){
			synchronized (GetConn.class) {
				if(gc==null){
					gc=new GetConn();
				}
			}
		}
		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();
					}
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44556592/article/details/86525703