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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

想用反射从数据库里查询出数据,并把他们用set方法设进对象中,在调用set的方法,会抛出java.lang.IllegalArgumentException: argument type mismatch错误,出错代码如下:
  1. for (Method m : ms) {
  2.                                                 if (methodName.equals(m.getName())) {
  3.                                                         //System.out.println(m.getName());
  4.                                                         //System.out.println(rs.getObject(colName));
  5.                                                         m.invoke(obj, new Object[] {rs.getObject(colName)});
  6.                                                 }

  7.                                         }
  8. JdbcUtils.java:
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13. import java.sql.Statement;

  14. public class JdbcUtils {
  15.         private static String url = "jdbc:mysql://localhost:3306/userinfo";
  16.         private static String username = "root";
  17.         private static String password = "root";
  18.        
  19.         private JdbcUtils(){}
  20.        
  21.         static{
  22.                 try {
  23.                         Class.forName("com.mysql.jdbc.Driver");
  24.                 } catch (ClassNotFoundException e) {
  25.                         // TODO Auto-generated catch block
  26.                         e.printStackTrace();
  27.                 }
  28.         }

  29.         public static Connection getConnection() throws SQLException{
  30.                
  31.                         return DriverManager.getConnection(url,username,password);
  32.                
  33.         }
  34.        
  35.         public static void free(ResultSet rs, Statement smt,Connection conn){
  36.                 if(rs != null)
  37.                         try {
  38.                                 rs.close();
  39.                         } catch (SQLException e) {
  40.                                 // TODO Auto-generated catch block
  41.                                 e.printStackTrace();
  42.                         }finally{
  43.                                         if(smt != null)
  44.                                                 try {
  45.                                                         smt.close();
  46.                                                 } catch (SQLException e) {
  47.                                                         // TODO Auto-generated catch block
  48.                                                         e.printStackTrace();
  49.                                                 }finally{
  50.                                                         if(conn != null)
  51.                                                                 try {
  52.                                                                         conn.close();
  53.                                                                 } catch (SQLException e) {
  54.                                                                         // TODO Auto-generated catch block
  55.                                                                         e.printStackTrace();
  56.                                                                 }
  57.                                                 }
  58.                         }
  59.         }
  60. }
  61. ORMTest.java:
  62. import java.lang.reflect.InvocationTargetException;
  63. import java.lang.reflect.Method;
  64. import java.sql.Connection;
  65. import java.sql.PreparedStatement;
  66. import java.sql.ResultSet;
  67. import java.sql.ResultSetMetaData;
  68. import java.sql.SQLException;


  69. public class ORMTest {

  70.         /**
  71.          * @param args
  72.          * @throws Exception
  73.          */
  74.         public static void main(String[] args) throws Exception {
  75.                 User user = (User) getObject(
  76.                                 "select id as Id, name as Name, birthday as Birthday, salary as Salary from userinfo where id=1",
  77.                                 User.class);
  78.                 System.out.println(user.getName());
  79.         }

  80.         public static Object getObject(String sql, Class clazz) throws Exception {
  81.                 Connection conn = null;
  82.                 PreparedStatement ps = null;
  83.                 ResultSet rs = null;
  84.                 try {
  85.                         conn = JdbcUtils.getConnection();
  86.                         ps = conn.prepareStatement(sql);
  87.                         rs = ps.executeQuery();
  88.                         String[] colNames = getColNames(rs);
  89.                         Object obj = null;
  90.                         Method[] ms = clazz.getMethods();
  91.                         if (rs.next()) {
  92.                                 obj = clazz.newInstance();
  93.                                 for (int i = 0; i < colNames.length; i++) {
  94.                                         String colName = colNames[i];
  95.                                         String methodName = "set" + colName;
  96.                                         System.out.println(methodName);
  97.                                         System.out.println(rs.getObject(colName));
  98.                                         Object argument = rs.getObject(colName);
  99.                                         for (Method m : ms) {
  100.                                                 if (methodName.equals(m.getName())) {
  101.                                                         //System.out.println(m.getName());
  102.                                                         //System.out.println(rs.getObject(colName));
  103.                                                         m.invoke(obj, new Object[] {rs.getObject(colName)});
  104.                                                 }
  105.                                         }
  106.                                 }

  107.                         }
  108.                         return obj;

  109.                 } finally {
  110.                         JdbcUtils.free(rs, ps, conn);
  111.                 }

  112.         }

  113.         private static String[] getColNames(ResultSet rs) throws Exception {
  114.                 ResultSetMetaData rsmd = rs.getMetaData();
  115.                 int count = rsmd.getColumnCount();
  116.                 String[] colNames = new String[count];
  117.                 for (int i = 1; i <= count; i++) {
  118.                         colNames[i - 1] = rsmd.getColumnLabel(i);
  119.                 }
  120.                 return colNames;
  121.         }

  122.         static Object getObject1(String sql, Class clazz) throws SQLException,
  123.                         Exception, IllegalAccessException, InvocationTargetException {
  124.                 Connection conn = null;
  125.                 PreparedStatement ps = null;
  126.                 ResultSet rs = null;
  127.                 try {
  128.                         conn = JdbcUtils.getConnection();
  129.                         ps = conn.prepareStatement(sql);
  130.                         rs = ps.executeQuery();
  131.                         String[] colNames = getColNames(rs);

  132.                         Object object = null;
  133.                         Method[] ms = clazz.getMethods();
  134.                         if (rs.next()) {
  135.                                 object = clazz.newInstance();
  136.                                 for (int i = 0; i < colNames.length; i++) {
  137.                                         String colName = colNames[i];
  138.                                         String methodName = "set" + colName;
  139.                                         // Object value = rs.getObject(colName);
  140.                                         // try {
  141.                                         // Method m = clazz
  142.                                         // .getMethod(methodName, value.getClass());
  143.                                         // if (m != null)
  144.                                         // m.invoke(object, value);
  145.                                         // } catch (NoSuchMethodException e) {
  146.                                         // e.printStackTrace();
  147.                                         // //
  148.                                         // }
  149.                                         for (Method m : ms) {
  150.                                                 if (methodName.equals(m.getName())) {
  151.                                                         m.invoke(object, rs.getObject(colName));
  152.                                                         break;
  153.                                                 }
  154.                                         }
  155.                                 }
  156.                         }
  157.                         return object;
  158.                 } finally {
  159.                         JdbcUtils.free(rs, ps, conn);
  160.                 }
  161.         }

  162. }
  163. User.java:


  164. import java.util.Date;

  165. public class User {

  166.         private int id;
  167.         private String name;
  168.         private Date birthday;
  169.         private float salary;
  170.        
  171.         public User(){}
  172.        
  173.         public User(String name){
  174.                 this.name = name;
  175.         }

  176.         public int getId() {
  177.                 return id;
  178.         }

  179.         public void setId(int id) {
  180.                 this.id = id;
  181.         }

  182.         public String getName() {
  183.                 return name;
  184.         }

  185.         public void setName(String name) {
  186.                 this.name = name;
  187.         }

  188.         public Date getBirthday() {
  189.                 return birthday;
  190.         }

  191.         public void setBirthday(Date birthday) {
  192.                 this.birthday = birthday;
  193.         }

  194.         public float getSalary() {
  195.                 return salary;
  196.         }

  197.         public void setSalary(float salary) {
  198.                 this.salary = salary;
  199.         }
  200.        
  201.        

  202. }

复制代码

2 个回复

倒序浏览
lz你贴这么一大段代码,还将几个文件代码贴在一起,错误就贴一点点java.lang.IllegalArgumentException: argument type mismatch

你至少将控制台里的错误都贴出来啊。不然要解决你的问题,还需要自己去复制粘贴你的代码,而且你给的错误上下文里的代码又是莫名奇妙的,那个rs谁知道是什么东西

人家解决问题是免费的还需要时间,你又一点自己思考的痕迹都不给出来,换成谁,谁都不愿意回答你的这个问题撒。

回复 使用道具 举报
180行import java.util.Date 换 import java.sql.Date试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马