package PetShop.util;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public abstract class DBUtil<T>{
private Connection conn=null;
private PreparedStatement pst=null;
private ResultSet rs=null;
private Properties pro=new Properties();
//1.统一连接方法 需要上面那一串
public Connection getConn(){
try {
pro.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
Class.forName(pro.getProperty("driver"));
conn= DriverManager.getConnection(pro.getProperty("url"),pro.getProperty("uname"),pro.getProperty("password"));
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//2.统一关闭方法
public void getClose(ResultSet rs,PreparedStatement pst,Connection conn){
try {
if (rs!=null){
rs.close();
}if (pst!=null){
pst.close();
}if(conn!=null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
//3.统一更新方法 增删改返回的都是受影响行数
public boolean update(String sql,Object...obj){
try {
pst=getConn().prepareStatement(sql);
//为占位符赋值
for (int i = 0; i < obj.length; i++) {
pst.setObject(i+1,obj[i]);
}
//执行sql
int row=pst.executeUpdate();
if (row>0){
return true;
}
}catch (Exception e){
e.printStackTrace();
}
return false;
}
//4.统一查询方法
public List<T> query(String sql,Object...obj){
List<T>list=new ArrayList<>();
try {
pst=getConn().prepareStatement(sql);
//为占位符赋值
for (int i = 0; i < obj.length; i++) {
pst.setObject(i+1,obj[i]);
}
//执行sql
rs=pst.executeQuery();
//获取结果集的数据源结构
ResultSetMetaData rsmd=rs.getMetaData();
//获取到表名,得到类
String tableName=rsmd.getTableName(1);
Class Clazz=Class.forName("PetShop/bean."+tableName.substring(0,1).toUpperCase()+tableName.substring(1));
//获取到字段的个数
int cnum=rsmd.getColumnCount();
while (rs.next()){
//创建对象 不要去检查的警告,解决警告
@SuppressWarnings("unchecked")
T t= (T) Clazz.newInstance();
//循环字段
for (int i = 0; i < cnum; i++) {
//循环字段并获取到字段名称
String cname=rsmd.getColumnName(i+1);
//通过字段名获取到属性
Field f= Clazz.getDeclaredField(cname);
//打开权限
f.setAccessible(true);
//为每个属性赋值
f.set(t,rs.getObject(i+1));
}
//再将对象放入集合
list.add(t);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}
#??
driver=com.mysql.jdbc.Driver
#???????
#url=jdbc:mysql://localhost:3306/myshop1?characterEncoding=utf-8&useSSL=true
url=jdbc:mysql://localhost:3306/petshop?characterEncoding=utf-8&useSSL=true
#???
uname=root
#??
password=111111
#???????
#url=jdbc:mysql://localhost:3306/myshop?characterEncoding=utf-8