package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//单例模式
public final class DBFactorySingle
{
private String url = "jdbc:mysql://localhost:3306/jdbc";
private String user = "root";
private String password = "123456";
// 预实例化,进来时就被实例化了
// private static DBFactorySingle instance = new DBFactorySingle();
// 延迟加载,用的时候再实例化
private static DBFactorySingle instance = null;
// 为了不让别人去new所以定义成私有的
private DBFactorySingle()
{
}
// 把注册驱动放在静态代码块中,保证,整个过程中只执行一次
static
{
try
{
// 1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e)
{
// 抛出异常,为了让后边出错时,程序员知道是哪出错了
throw new ExceptionInInitializerError(e);
}
}
public static DBFactorySingle getInstance(){
// return instance;//对应与实例化
if(instance==null)
{
synchronized(DBFactorySingle.class){//加锁
if(instance==null)//双重检查
{
instance = new DBFactorySingle();
}
}
}
return instance;//对应延迟加载
}
// 返回一个Connection连接
public Connection getConnection() throws SQLException
{
return DriverManager.getConnection(url, user, password);
}
// 释放连接资源
public void free(Connection conn, Statement stmt, ResultSet rs)
{
try
{
if (rs != null)
rs.close();
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
try
{
if (stmt != null)
stmt.close();
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
try
{
if (conn != null)
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
}