当前位置:Gxlcms > 数据库问题 > 反射的应用,jdbc封装

反射的应用,jdbc封装

时间:2021-07-01 10:21:17 帮助过:4人阅读

cn.ljs; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import cn.ljs.utill.Jdbcutill; public class TestUser { public static void main(String[] args) throws Exception { TestUser testUser = new TestUser(); List list = testUser.rowToBean("select * from dept", Dept.class); for (int i = 0; i < list.size(); i++) { Dept dept = (Dept)list.get(i); System.out.println(dept); } } public List rowToBean(String sql,Class cls) throws Exception{ List list = new ArrayList<>(); //调用自定义的方法,加载数据库,创建数据库的连接对象 Connection conn = Jdbcutill.getConnection(); //创建预编译对象,结果集对象 PreparedStatement ps= null; ResultSet rs = null; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); // 每一个rs对象都对应一个ResultSetMetaData对象 ResultSetMetaData metaData = rs.getMetaData(); // 获取查询的列数 int count = metaData.getColumnCount(); //遍历 while(rs.next()){ Object object = cls.newInstance(); for (int i = 0; i < count; i++) { //获取第几列的名字 String fieldName = metaData.getColumnName(i+1).toLowerCase(); //通过类名获取类中的属性的描述 Field field = cls.getDeclaredField(fieldName); //通过类名,拼接的方法名,属性描述的类型获取set方法 Method method = cls.getDeclaredMethod(getSetMethodName(fieldName),field.getType()); //通过结果集获取数据库中的属性值 Object objval = rs.getObject(fieldName); //执行setfangfa(需要类的对象名,数据库的属性值) if (objval != null) { if (objval instanceof Number) { if (field.getType().getName().equals("int") || field.getType().getName().equals("java.lang.Integer")) { method.invoke(object, rs.getInt(fieldName)); } else if (field.getType().getName().equals("long") || field.getType().getName().equals("java.lang.Long")) { method.invoke(object, rs.getLong(fieldName)); } else if (field.getType().getName().equals("double") || field.getType().getName().equals("java.lang.Double")) { method.invoke(object, rs.getDouble(fieldName)); } else if (field.getType().getName().equals("short") || field.getType().getName().equals("java.lang.Short")) { method.invoke(object, rs.getShort(fieldName)); } else if (field.getType().getName().equals("byte") || field.getType().getName().equals("java.lang.Byte")) { method.invoke(object, rs.getByte(fieldName)); } else if (field.getType().getName().equals("float") || field.getType().getName().equals("java.lang.Float")) { method.invoke(object, rs.getFloat(fieldName)); } } else { method.invoke(object, objval); } } //关闭资源 } list.add(object); } Jdbcutill.close(conn, ps, rs); return list; } //拼接set方法名 public String getSetMethodName(String fieldName){ return "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); } }

 

反射的应用,jdbc封装

标签:throws   void   from   rop   field   set   pac   except   state   

人气教程排行