public final class JDBCUtils {
//数据库访问地址
public static final String url="jdbc:mysql://localhost:3306/test";
//用户名
public static final String user="root";
//密码,这里的密码为空
public static final String password="";
//使用静态代码块注册驱动,只加载一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError();
}
}
//私有化构造方法
private JDBCUtils(){}
//创建一个JDBCUtils的实例,初始化为空
private static JDBCUtils instance = null;
//提供一个方法创建JDBCUtils的实例对象
public static JDBCUtils getInstance(){
//当instance为空时,创建对象
if(instance==null){
//这里加锁使用同步方法
synchronized (JDBCUtils.class) {
//这里再判断一次instance是否为空,因为当第一个线程进来创建对象之后,instance就不为空了,以后的线程进来不需要再创建对象了
if(instance==null){
instance=new JDBCUtils();
}
}
}
return instance;
}
//创建连接
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
//释放资源
public void free(Connection conn,Statement st,ResultSet rs){
//这里层层嵌套的原因是因为,如果前面的资源关闭出现异常会导致后面的资源不能关闭,
//所以采用嵌套的方法,保证即使前面的出现异常,也可以关闭后面的资源
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(st!=null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
JDBCUtils 工具类
最新推荐文章于 2022-11-03 11:26:48 发布