zoukankan      html  css  js  c++  java
  • Java JDBC利用反射技术将查询结果封装为对象

    1、JDBC将返回结果集封装成对象demo

         class JdbcDemo {
    
            /**
             * 获取数据库列名
             * @param  rs
             * @return
             */
             private static String[] getColNames(ResultSet rs) throws SQLException {
                 ResultSetMetaData rsmd = rs.getMetaData();
                 //获取查询的列数
                 int count = rsmd.getColumnCount();
                 String[] colNames = new String[count];
                 for(int i = 1; i <= count; i ++) {
                     //获取列名
                     colNames[i - 1] = rsmd.getColumnLabel(i);
                 }
                 return colNames;
             }
    
             /**
              * 将JDBC查询返回的结果集,利用反射封装成对象
              * @param sql
              * @param clazz
              * @return
              */
             private static Object getObject(String sql, Class clazz) {
                 Connection conn = null;
                 PreparedStatement ps = null;
                 ResultSet rs = null;
    
                 try {
                     conn = JdbcUtils.getConnection();
                     ps = conn.prepareStatement(sql);
                     rs = ps.executeQuery();
                     String[] colNames = getColNames(rs);
    
                     Object object = null;
                     Method[] ms = clazz.getMethods();
                     if(rs.next()) {
                         object = clazz.newInstance();
                         for(int i = 0; i < colNames.length; i ++) {
                             String colName = colNames[i];
                             String methodName = "set" + colName;
                             //稳妥一点。在对象查询下是否有此方法在调用方法
                             for(Method md : ms) {
                                 if(methodName.equals(md.getName())) {
                                     md.invoke(object, rs.getObject(colName));
                                     break;
                                 }
                             }
                         }
                     }
                     return object;
                 } finally {
                     //释放连接
                     JdbcUtils.free(rs, ps, conn);
                 }
             }
            
         }
  • 相关阅读:
    java 日期的格式化
    JAVA 线程
    java 异常
    java 内部类
    java 多态
    SpringBoot(12) SpringBoot创建非web应用
    SpringCloud(1) 架构演进和基础知识简介
    SpringBoot(11) SpringBoot自定义拦截器
    SpringBoot(10) Servlet3.0的注解:自定义原生Servlet、自定义原生Listener
    SpringBoot(9) SpringBoot整合Mybaties
  • 原文地址:https://www.cnblogs.com/chenweichu/p/11128616.html
Copyright © 2011-2022 走看看