扫码关注官方订阅号
代码:
public static List select(String sql, String o) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Class c = Class.forName(o); Field[] fls = c.getDeclaredFields(); List list= new ArrayList<>(); for (int i = 0; i < fls.length; i++) { System.out.println("公有属性之" + fls[i].getName()); list.add(fls[i].getName()); } Object object = c.newInstance(); List l = new ArrayList<>(); stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { // Retrieve by column name String id = rs.getString("href"); String name = rs.getString("title"); // Display values System.out.print("ID: " + id); System.out.print(", name: " + name); } rs.close(); stmt.close(); conn.close(); return l; }
我想获取传进来的类的所有属性,然后通过re.getString获得值,但是我不知道属性有多少个,在rs.next里for循环遍历的话就会失去rs的作用域。麻烦哪位大神帮我看看怎么写 = =。
认证0级讲师
不太会排版,凑合看。
while(rs.next()){ //cls: Class<T> cls T t=cls.newInstance(); //rsmd: ResultSetMetaData rsmd for(int i=0;i<rsmd.getColumnCount();i++){ errorIndex=i+1; String columnName=(rsmd.getColumnName(i+1)).toLowerCase(); //rs: ResultSet rs Object obj=rs.getObject(columnName); if(null==obj) continue; columnName=String.valueOf(columnName.charAt(0)).toUpperCase()+columnName.substring(1); Method m; m=cls.getMethod("set"+columnName, obj.getClass()); m.invoke(t, obj); } dataList.add(t); }
你的反射其实存在点问题:即使要获取class对象,最好不要通过Class.formName,除非你确实是需要动态加载外部类。
不知道这样写是否符合你的要求
public static List<Map<String,Object>> select(Object o) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Field[] fds=o.getClass().getDeclaredFields(); String[] names=new String[fds.length]; for(int i=0;i<fds.length;i++){ names[i]=fds[i].getName(); System.out.println(names[i]); } List<Map<String,Object>> list=new ArrayList<>(); stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { Map<String,Object> m=new HashMap<>(); for(String name:names){ String tmp = rs.getString(name); m.put(name, tmp); } list.add(m); } rs.close(); stmt.close(); conn.close(); return list;
org.springframework.jdbc.core.BeanPropertyRowMapper 现成的实现,你可以参考,并且模仿一下。
org.springframework.jdbc.core.BeanPropertyRowMapper
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
不太会排版,凑合看。
你的反射其实存在点问题:
即使要获取class对象,最好不要通过Class.formName,除非你确实是需要动态加载外部类。
不知道这样写是否符合你的要求
org.springframework.jdbc.core.BeanPropertyRowMapper现成的实现,你可以参考,并且模仿一下。