使用单例模式实现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();
					}
				}
			}
		}
	}
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值