package com.zuxia.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBUtil {
//定义私有的静态的常量字符串
private static final String USERNAME="root";
private static final String PASSWORD="123456";
private static final String URL="jdbc:mysql://localhost:3306/userdb?characterEncoding=utf8";
private static final String DRIVER_URL="com.mysql.jdbc.Driver";
//静态语句块(优先执行且只执行1次)————加载驱动
static{
try {
Class.forName(DRIVER_URL);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//公开的静态的方法————获取连接对象
public static Connection getConn(){
try {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void getClose(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//通用的增删改方法
public static int commonsZSG(String sql,Object... params){
Connection conn=DBUtil.getConn();
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps=conn.prepareStatement(sql);
//如果有参数时,再进行遍历赋值
if(params!=null && params.length>0){
//可变参数:实质是一个数组
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
}
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.getClose(conn, ps, rs);
}
return 0;
}
//通用的查询方法
public static List commonsQuery(String sql,Class cla,Object... params){
Connection conn=DBUtil.getConn();
PreparedStatement ps=null;
ResultSet rs=null;
List list=new ArrayList();
try {
ps=conn.prepareStatement(sql);
//如果有参数时,再进行遍历赋值
if(params!=null && params.length>0){
//可变参数:实质是一个数组
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
}
rs=ps.executeQuery();
while(rs.next()){
Object obj = reflect(cla, rs);
//加入集合
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
DBUtil.getClose(conn, ps, rs);
}
return list;
}
//递归
private static Object reflect(Class cla,ResultSet rs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SQLException, ClassNotFoundException{
Object obj = cla.newInstance();
Field[] fl = cla.getDeclaredFields();
for(Field f : fl){
f.setAccessible(true);
if(f.getType().getName().contains("zuxia")){//对象
Object refObj = reflect(Class.forName(f.getType().getName()),rs);
f.set(obj, refObj);
}else{//普通字段
f.set(obj, rs.getObject(f.getName()));
}
}
return obj;
}
}
DBUtils的封装
于 2021-10-12 19:54:03 首次发布