ThreadLocal 就是一个存取据的区域,它类似一个map集合,集合的key值为此线程的线程名(默认),同一线程可在ThreadLocation中进行存取数据.
对于事物的操控:
开启事务:con.setAutoCommit(false);
回滚事务:con.rollback();
提交事务:con.commit();
手动开启关闭事务,需要同时执行多条sql语句,要求共同成功,共同失败,执行sql语句的con与操纵开启,回滚,提交事务的con是同一个con这就需要用ThreadLocal来存储con,
public class c3p0utils {
private c3p0utils(){
}
private static ComboPooledDataSource datasource=new ComboPooledDataSource();
private static ThreadLocal tl=new ThreadLocal();
public static DataSource getDataSource(){
return datasource;
}
public static Connection getConnection(){
try {
return datasource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static Connection getCurrentConnection(){
Connection con=(Connection) tl.get();
if(con==null){
con=getConnection();
tl.set(con);
}
return con;
}
public static void setTransacation() throws SQLException{
getCurrentConnection().setAutoCommit(false);
}
public static void rollback() throws SQLException{
getCurrentConnection().rollback();
}
public static void commit() throws SQLException{
getCurrentConnection().commit();
}
}