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);
             }
         }
        
     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM