jdbc mysql 通用查询_JAVA(JDBC)通用查询

importjava.lang.reflect.Field;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importcom.sql.entity.Student;public classSqlSelect1 {private static Logger logger=LogManager.getLogger(SqlSelect1.class.getName());public static List query(Classclazz, String sql, Object... args) {

T entity= null;

//笔者虚拟机默认装的mariadb,建立连接与mysql差不多,连接的封装就不发上来了。

MariaDBConn maria=null;

PreparedStatement pstmt= null;

ResultSet resultSet= null;

List list = new ArrayList();int colLen=0;try{

maria=newMariaDBConn();

pstmt=maria.getConn().prepareStatement(sql);int argsLen=args.length;for (int i = 0; i

pstmt.setObject(i+ 1, args[i]);

}

resultSet=pstmt.executeQuery();

ResultSetMetaData resultSetMetaData=resultSet.getMetaData();//保证集合有序

Map values = new LinkedHashMap();while(resultSet.next()) {//使用随机数使key不重复

double plus=Math.random();

colLen=resultSetMetaData.getColumnCount();for (int i = 0; i

String columnLable=resultSetMetaData

.getColumnLabel(i+ 1);

Object columnValue= resultSet.getObject(i + 1);

values.put(columnLable+plus, columnValue);

}

}if (values.size() > 0) {

Iterator> it =values.entrySet( ).iterator();while(it.hasNext()){int i=0;

entity=clazz.newInstance();while(i

Entry entry=it.next();//剥离随机数,恢复正常key

String fieldName = entry.getKey().toString().split("\\d")[0];

Object value= null;if (entry.getValue() instanceofLong) {

value=Integer.parseInt(entry.getValue().toString());

}else{

value=entry.getValue();

}

Field field=clazz.getDeclaredField(fieldName);

field.setAccessible(true);

field.set(entity, value);

i++;

}

list.add(entity);

}

}

}catch(Exception e) {

logger.error(e);

}finally{try{if(pstmt!=null){

pstmt.close();

}

}catch(SQLException e) {

logger.error(e);

}try{if(resultSet!=null){

resultSet.close();

}

}catch(SQLException e) {

logger.error(e);

}

maria.closeConn();

}returnlist;

}//测试:

public static voidmain(String[] args) {

List list=SqlSelect1.query(Student.class, "select id,name,birthday,gender from students");int size=list.size();for (int i = 0; i < size; i++) {

System.out.println(list.get(i));

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值