JDBCUtils工具类
package util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static Properties prop = new Properties();
private static ThreadLocal<Connection> t1 = new ThreadLocal<>();
static{
InputStream in = null;
try {
in = JDBCUtils.class.getResourceAsStream("/jdbc.propertise");
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(in !=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
Class.forName(prop.getProperty("drivername"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static Connection getConnection(){
Connection conn = t1.get();
if(conn == null){
try {
conn = DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("username"),prop.getProperty("password"));
t1.set(conn);
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new RuntimeException(throwables);
}
}else{
t1.get();
}
return conn;
}
public static void closes(Connection conn, PreparedStatement pstm, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(pstm != null){
try {
pstm.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
t1.remove();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
//加载驱动、获取连接、关闭资源
事务控制
Connection conn = JDBCUtils.getConnection();
try{
// 开启事务
conn.setAutoCommit(false);
//多条sql语句 在dao包中实现类出现异常需catch语句抛出运行时异常 实现类不需要关闭连接
ProductDaoImpl productDao = new ProductDaoImpl();
Product product = productDao.selectProductById(productId);
if(product == null){
throw new RuntimeException("不存在该id");
}
product.setProductName("凳子");
productDao.updateProduct(product);
//测试回滚
if(true){
throw new RuntimeException();
}
//sql语句执行成功,提交
conn.commit();
}catch (Exception e){
//sql语句执行失败,回滚
try {
conn.rollback();
System.out.println("回滚");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
// e.printStackTrace();
throw new RuntimeException(e);
}finally {
JDBCUtils.closes(conn,null,null);
}