package com.jdbc.util;
import com.jdbc.test.TestProperties;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DBUtil {
private static String driver;
private static String url;
private static String username;
private static String passwd;
//日志对象 logger
// private static Logger logger=Logger.getLogger(DBUtil.class.getName());
private static Logger logger=Logger.getLogger(DBUtil.class.getName());
static {
try {
//读取属性文件
// InputStream input=DBUtil.class.getResourceAsStream("/jdbc.properties");
InputStream input=DBUtil.class.getResourceAsStream("/jdbc.properties");
Properties properties=new Properties();
properties.load(input);
driver=properties.getProperty("driver");
url=properties.getProperty("url");
username=properties.getProperty("username");
passwd=properties.getProperty("passwd");
//记录日志
logger.debug("加载了属性文件");
logger.info("加载了属性文件2");
logger.error("加载了属性文件3");
} catch (IOException e) {
e.printStackTrace();
}
}
//获得Connection连接方法
public static Connection getConnection(){
Connection conn=null;
try {
//1.类加载
// Class.forName("com.mysql.cj.jdbc.Driver");
Class.forName(driver);
//2.连接数据库,获得链接对象
// conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
// "root","123456");
conn= DriverManager.getConnection(url,username,passwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//封装增删改的操作(DML)obj里面保存的就是传递的参数,一定注意参数的格式的个数和占位符的格式一致,位置也要保持一致
public static int exeUpdate(String sql,Object[] obj){
Connection conn=getConnection();
PreparedStatement pstm=null;
int update=0;
try {
//常见命令发送器(手枪)
pstm=conn.prepareStatement(sql);
//执行sql语句,返回结果(SQL就相当于子弹)
for (int i = 0; i < obj.length; i++) {
pstm.setObject(i+1,obj[i]);
}
update=pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeALL(pstm,conn,null);
}
return update;
}
//抽取关闭操作
public static void closeALL(PreparedStatement pstm, Connection conn, ResultSet rs ){
try {
if (pstm!=null){
pstm.close();
}
}catch (SQLException e){
e.printStackTrace();
}
try {
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (rs!=null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}