A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈建华 中级黑马   /  2012-12-5 16:10  /  749 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的m.invoke(user, rs.getObject(colName));
方法为什么当遇见int类型时出现类型匹配异常。

package cn.itcast.jdbc;

import java.lang.reflect.InvocationTargetException;
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 com.itcast.domain.User;

public class ORMTest {

        /**
         * @param args
         * @throws InvocationTargetException
         * @throws IllegalAccessException
         * @throws SQLException
         * @throws IllegalArgumentException
         */
        public static void main(String[] args) throws Exception {
                User user = getUser("select * from user where name='wangwu'");
                System.out.println(user.getName());
                System.out.println(user.getId());
                System.out.println(user.getMoney());
                System.out.println(user.getBirthday());
        }
       
        static User getUser(String sql) throws Exception{
                Connection conn = null;
                PreparedStatement ps = null;
                ResultSet rs = null;
                try {
                        conn = JdbcUtils.getConnection();
                        ps = conn.prepareStatement(sql);
                        rs = ps.executeQuery();
                        ResultSetMetaData rsmd = rs.getMetaData();
                        int count = rsmd.getColumnCount();
                        String[] colNames = new String[count];
                        for(int i=1; i<=count; i++){
                                colNames[i-1] = rsmd.getColumnName(i);
                        }
                        User user = null;
                        if(rs.next()){
                                user = new User();
                                for(int i=0; i<colNames.length; i++){
                                        String colName = colNames[i];
                                        String methodColName = colName.substring(0, 1).toUpperCase()+colName.substring(1);
                                        String methodName = "set"+methodColName;
                                        Method[] ms = user.getClass().getMethods();
                                        for(Method m: ms){
                                                if(methodName.equals(m.getName())){
                                                        if("setId".equals(methodName)){
                                                                m.invoke(user, rs.getInt(colName));
                                                        }else{
                                                                m.invoke(user, rs.getObject(colName));
                                                        }
//                                                        m.invoke(user, rs.getObject(colName));
                                                }
                                        }
                                }
                        }
                        return user;
                }finally{
                        JdbcUtils.prepareClose(rs, ps, conn);
                }
               
        }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马