例如
package com.utils;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
/**
* @author hrui
* @date 2023/10/13 13:49
*/
public class DBUtils {
private static ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
private static String driver=bundle.getString("jdbc.driver");
private static String url=bundle.getString("jdbc.url");
private static String username=bundle.getString("jdbc.username");
private static String password=bundle.getString("jdbc.password");
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//通用查询多个
public static <T> List<T> selectList(Class<T> clazz, String sql, Object...args){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=DBUtils.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs = ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
List<T> list=new ArrayList<>();
while(rs.next()){
T t = clazz.newInstance();
for(int i=0;i<columnCount;i++){
Object object = rs.getObject(i + 1);
//String columnName = metaData.getColumnName(i + 1); 这个方法返回实际列名
String columnLabel = metaData.getColumnLabel(i + 1);//该方法返回别名,没有别名就返回列名
if(columnLabel.contains("_")){
int index = columnLabel.indexOf("_");
String replace = columnLabel.replace("_", "");
char c = Character.toUpperCase(replace.charAt(index));
columnLabel=replace.substring(0, index)+c+replace.substring(index+1);
}
Field field = clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t,object);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.closed(conn,ps,rs);
}
return null;
}
//通用查询单个
public static <T> T selectOne(Class<T> clazz,String sql,Object...args){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=DBUtils.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs = ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
if(rs.next()){
T t = clazz.newInstance();
for(int i=0;i<columnCount;i++){
Object object = rs.getObject(i + 1);
String columnLabel = metaData.getColumnLabel(i + 1);
if(columnLabel.contains("_")){
int index = columnLabel.indexOf("_");
String replace = columnLabel.replace("_", "");
char c = Character.toUpperCase(replace.charAt(index));
columnLabel=replace.substring(0, index)+c+replace.substring(index+1);
}
Field field = clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t,object);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.closed(conn,ps,rs);
}
return null;
}
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
}
//通用增删改方法
public static int update(String sql,Object...args){
Connection conn =null;
PreparedStatement ps=null;
int count=0;
try {
conn = DBUtils.getConnection();
ps = conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
count = ps.executeUpdate();
//ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtils.closed(conn,ps,null);
}
return count;
}
public static void closed(Connection conn, Statement st, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这段代码中
可以提取出来作为独立的一个方法