package utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; public class JdbcUtils { static InputStream is = null; //配置文件的操作类Properties类(java.util.Properties) static Properties properties = new Properties(); static DataSource pool = null; //会话:登录系统后,可以进行多个操作,但只登录了一次 //事务:每个操作,如第一次转账和第二次转账是两个事务 //线程:一个人操作和多个人操作的问题 //一个会话可以创建多个事务,一个事务只能由一个会话产生 //一个事务可以产生多个线程,一个线程同一时间内只能由一个事务执行 //创建事务,类之间互调属于同一个线程,为同一个线程保存同一个连接值conn,为不同线程保存不同的连接值 //泛型里面可以放任意对象,用事务保存什么就放什么类型 static ThreadLocal<Connection> tdl = new ThreadLocal<Connection>(); //创建连接池,并将dbcp.properties以键值对的形式读入 static { //这个try是为createDataSource捕获的异常 try { //JDBCUtils.class为JDBCUtils的字节码文件 //当前class的包路径为基准,获取dbcp.properties文件的流 is = JdbcUtils.class.getResourceAsStream("/dbcp.properties"); //从输入流中以键值对的形式读取dbcp.propertie,要捕捉异常 try { properties.load(is); } catch (IOException e) { e.printStackTrace(); } //使用BasicDataSourceFactory数据连接池工厂类创建一个连接池 //并将从dbcp.propertie读取出的键值对放入连接池中 pool = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } finally { try { //关闭流文件,捕获异常 is.close(); } catch (IOException e) { e.printStackTrace(); } } } //获取连接 public static Connection getConnection() throws Exception { //获取当前线程中拥有的连接,如果没有就创建一个 Connection conn = tdl.get(); if (conn == null) { //从连接池中取值,并将连接加入当前线程中 conn = pool.getConnection(); tdl.set(conn); } return conn; } //释放资源 //导包导的都是有关sql的包 public static void release(ResultSet rs, PreparedStatement pstm, Connection conn) throws Exception { if (rs != null) { rs.close(); } if (pstm != null) { pstm.close(); } //关闭连接,同时将连接从当前线程中移除 if (conn != null) { conn.close(); tdl.remove(); } } } 配置文件 dbcp.properties driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/mysql?serverTimezone=GMT%2B8 username=root password=root |
|