JDBC之针对不同表的通用查询
package cmo.test01;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class CurrencySelcet {
public static void main(String[] args) throws Exception {
List<User> list = null;
list = select(User.class,"SELECT username 'name',id,birthhday 'birthday',sex,address FROM USER WHERE id=?;",1);
for(User u:list) {
System.out.println(u.toString());
}
}
public static <T> List<T> select(Class<T> clazz,String sql,Object... args) throws Exception {
InputStream is = ConnectSql.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String url = pros.getProperty("url");
String user = pros.getProperty("user");
String password = pros.getProperty("password");
Class.forName(pros.getProperty("driverClass"));
Connection conn = DriverManager.getConnection(url, user, password);
List<T> list = new ArrayList<>();
PreparedStatement ps = conn.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
ps.setObject(i+1, args[i]);
}
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
String linName=null;
int lin = rsmd.getColumnCount();
while(rs.next()) {
T t1 = clazz.newInstance();
for(int i=1;i<=lin;i++) {
linName = rsmd.getColumnLabel(i);
Field field = clazz.getDeclaredField(linName);
field.setAccessible(true);
field.set(t1, rs.getObject(i));
}
list.add(t1);
}
return list;
}
}