package com.ard.utils.jdbc; /** * @Description: * @ClassName: GetConn * @Author: 刘苏义 * @Date: 2023年09月19日13:12:38 **/ import org.springframework.core.io.ClassPathResource; import javax.annotation.Resource; import java.sql.*; import java.util.Properties; public class Conn { //jdbc连接需要用到的三个参数 private String url="jdbc:oracle:thin:@//112.98.126.2:21521/orcl"; private String user="c##ard_user"; private String pwd="123456"; //创建一个对象 设置为静态私有 (单例模式) private static Conn gc=null; //将构造函数设为private型 防止外部实例化对象 (通过反射或反序列化可以破解单例) private Conn(){}; //静态代码块,在类加载进内存时就完成对对象的特殊的初始化(这个动作发生在类的构造器执行之前,也就是在没有对象存在的情况下,静态代码就已经完成了对对象的特殊的处理 ),此处的作用是,当jdbc的驱动器加载时,就自动创建一个自己。 static{ try { //注册驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //判断GetConn实例化的对象是否存在 不存在就实例化一个 //synchronized 线程锁 防止多个线程抢占资源 防止死锁 public static Conn getGc(){ if(gc==null){ synchronized (Conn.class) { if(gc==null){ gc=new Conn(); } } } 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(); } } } } } }