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();
}
}
}
}
}
}
使用单例模式实现jdbc连接
猜你喜欢
转载自blog.csdn.net/weixin_44556592/article/details/86525703
今日推荐
周排行