import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.support.spring.stat.annotation.Stat;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class Dbutils {
private static DruidDataSource ds;
private static final ThreadLocal THREAD_LOCAL=new ThreadLocal();
static {
Properties properties=new Properties();
InputStream is=Dbutils.class.getResourceAsStream("/database.propertise");
try {
properties.load(is);
try {
ds=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection=THREAD_LOCAL.get();
try {
if(connection==null){
connection=ds.getConnection();
THREAD_LOCAL.set(connection);
}
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void begin(){
Connection connection=null;
connection=getConnection();
try {
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void commit(){
Connection connection=null;
connection=getConnection();
try {
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeAll(connection,null,null);
}
}
public static void rollback(){
Connection connection=null;
connection=getConnection();
try {
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet){
try {
if(resultSet!=null){
resultSet.close();
}
if(statement!=null){
statement.close();
}
if(connection!=null){
connection.close();
THREAD_LOCAL.remove();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
为什么每一个方法里面都要写Connection connection=null;前面的方法不是都已经连接好了吗?另外ThreadLoca用在这里的具体用处是什么?