分析
不同的表对于查询可能会有不一样:
①表中的列属性不同
②可能数据库中的属性名和javabean中的属性名不同
下面的方法主要解决了这两个问题。
代码主体:
本人偷了个懒吧异常全部抛出不管。。这个问题可以忽视哈哈哈
public class jdbtyfind {
public static <T>T getinfo(Class<T> classz,String sql,Object ...objects) throws ClassNotFoundException, IOException, SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException{
Connection conn = jdbcUtils.getconnection();
PreparedStatement ps=conn.prepareStatement(sql);
//填充占位符
for(int i=0;i<objects.length;i++) {
ps.setObject(i+1, objects[i]);
}
ResultSet executeQuery = ps.executeQuery();//获取结果集
ResultSetMetaData metaData = executeQuery.getMetaData();//获取结果集数据,用于知道有多少列
int count = metaData.getColumnCount();//拿到列数
//运用反射处理结果集
if(executeQuery.next()) {
T interfaces = classz.newInstance();//创造一个泛型对象
for(int i=0;i<count;i++) {
Object objectvalue = executeQuery.getObject(i+1);//获取列的值;
String columnName = metaData.getColumnLabel(i+1);//获取列名
Field declaredField = classz.getDeclaredField(columnName);//通过反射找到javabean中对应的参数
declaredField.setAccessible(true);//设置可以访问私有属性
declaredField.set(interfaces, objectvalue);//向创建的泛型类对象中放入数据
}
conn.close();
ps.close();
return interfaces;
}else {
conn.close();
ps.close();
return null;
}
}
上述代码中的jdbcUtils.getconnection()是自己封装的JDBC的连接方法
代码如下:
public class jdbcUtils {//封装JDBC的连接
@Test
public static Connection getconnection() throws ClassNotFoundException, IOException, SQLException {
//运用反射机制加载jdbc配置文件
java.io.InputStream resource = JDBC.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties is =new Properties();
is.load(resource);
String user = is.getProperty("user");
String password = is.getProperty("password");
String url = is.getProperty("url");
String DriverClass = is.getProperty("DriverClass");
Class.forName(DriverClass);//加载驱动
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
jdbc.properties文件参数如下:
user=sa
password=sa
url=jdbc:sqlserver://localhost:1433; DatabaseName=user
DriverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver