问题,我也知道出在哪里,是因为把object赋给了低级别的对象,但是我不知道怎么解决;下面给代码,希望能说出完整的解题思路,跪谢!/*自动封装对象*/
public <T>T getBean(T bean) throws Exception{
try{
conn=super.getCon();
ps=conn.prepareStatement("select * from jdbctest where id=1");
rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData(); //找到rs的信息
int cont=rsmd.getColumnCount();//查找出列数
Method[] mh=bean.getClass().getMethods(); //查找出传入对象的所有方法(包括继承的方法)
int i =0;
    while(rs.next()) {
//获取列名
     String name =rsmd.getColumnLabel(i+1); //找到列名
     String colmName="set"+rsmd.getColumnLabel(i+1);
     System.out.println("列名"+colmName);
     i++;
     /*遍历方法,寻找set方法,然后调用*/
     for (Method mds : mh) {
     if(colmName.equalsIgnoreCase(mds.getName())){
     mds.invoke(bean,rs.getObject(name)); //这里接受的对象,切记不能使用 bean.getClass().newInstance(); 因为这个会构造出一个新对象;
     }
     }
}
    return bean;
}finally{
super.closeCon(conn, ps, rs);
}

解决方案 »

  1.   

    根据javabean的规则String colmName="set"+rsmd.getColumnLabel(i+1); 
    rsmd.getColumnLabel(i+1)拿到的名称首字母必须大写才是。
    同时调用 mds.invoke(bean,rs.getObject(name)),时候必须利用反射对参数类型进行分析在进行转换后调用。
    建议用beanutils工具包。
      

  2.   

    ResultSet.getObject()
    此方法将以 Java 对象的形式返回给定列的值。Java 对象的类型将为与该列的 SQL 类型相对应的默认 Java 对象类型,它遵守在 JDBC 规范中指定的内置类型的映射关系。如果值为 SQL NULL,则驱动程序返回一个 Java null。你的bean字段与数据库具体的表,在jdbc进行类型映射时出现类型不匹配,因此你可能不能简单地使用getObject()来获得特定字段的值,你需要进一步使用反射分析每个字段的实际定义类型,进而从数据库中使用相应类型的getXXX()方法进行转换,否则就是ClassNotCastException!
      

  3.   

    就是这句:mds.invoke(bean,rs.getObject(name));  类型错误了,我不知道如何处理!
      

  4.   

    if(colmName.equalsIgnoreCase(mds.getName())){
    mds.invoke(bean,rs.getObject(name)); //这里接受的对象,切记不能使用 bean.getClass().newInstance(); 因为这个会构造出一个新对象;你去找这个方法的时候应该要指定参数的类型和、个数,不然如果你有重载的,或是重写的话就会出错了