package util;
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 exception.DataAccessException;
public class JdbcUtil {
private static Properties config;
private static ThreadLocal<Connection> threadLocal;
static{
try {
threadLocal=new ThreadLocal<Connection>();
config=new Properties();
config.load(JdbcUtil.class
.getClassLoader()
.getResourceAsStream("jdbc.properties"));
Class.forName(config.getProperty("driver"));
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError("JdbcUtil初始化错误");
}
}
//保证一个事务一个连接,一个事务一个业务,一个事务一次操作,一个线程一个事务
//每个线程获得一个连接
public static Connection getConnection(){
Connection con=threadLocal.get();
if(con==null){
try {
con=DriverManager.getConnection(config.getProperty("url"),
config.getProperty("username"),
config.getProperty("password"));
threadLocal.set(con);
} catch (Exception e) {
e.printStackTrace();
throw new DataAccessException("数据访问失败",e);
}
}
return con;
}
public static void close(Connection con,PreparedStatement ps,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//关闭跟本线程相关的连接
public static void close(){
Connection con=threadLocal.get();
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
threadLocal.remove();
}
}
}
JDBCUtil工具类回顾
最新推荐文章于 2020-11-02 23:56:10 发布