如何使用java从“Class.forName(name).newInstance()”获取当前字符串

时间:2011-02-22 09:29:27

标签: java sql mysql

这是我的代码:

public static List populate(ResultSet rs, Class clazz) throws Exception {

        ResultSetMetaData metaData = rs.getMetaData(); 

        int colCount = metaData.getColumnCount(); 

        List ret = new ArrayList(); 

        Field[] fields = clazz.getDeclaredFields(); 

        while (rs.next()) {
            Object newInstance = clazz.newInstance(); 



            for (int i = 1; i <= colCount; i++) { 
                try {
                    Object value = rs.getObject(i);

                    for (int j = 0; j < fields.length; j++) {
                        Field f = fields[j];
                        if (f.getName().replaceAll("_", "").equalsIgnoreCase(
                                metaData.getColumnName(i).replaceAll("_", ""))) {
                            BeanUtils.copyProperty(newInstance, f.getName(),
                                    value);
                        }
                    }
                } catch (Exception e) {

                    e.printStackTrace();
                }
            }
            ret.add(newInstance);
        }
        rs.close();
        return ret;
    }

这是调用它的方法:

public List getLastAddress(String terminal_id, String last_2) throws Exception {
        String sql ="SELECT a.adress_reality from accounts_location_"+last_2+" AS a WHERE a.terminal_id = '"
                +terminal_id+"' ORDER BY a.time_stamp DESC limit 1";

        System.out.println(sql);
        ResultSet rs = getDr().getSt().executeQuery(sql);

        return populate(rs, Class.forName("hdt.ChineseAddressBean"));

然后:

List cn_address=sd.getLastAddress(toNomber,last_2);  
System.out.println(cn_address.get(0));

但它显示:

hdt.ChineseAddressBean@f0eed6

所以如何从cn_address.get(0)

获取当前字符串

感谢

这是我的ChineseAddressBean.java:

package hdt;

public class ChineseAddressBean {

    String adress_reality = "";

    public String getAdress_reality() {
        return adress_reality;
    }

    public void setAdress_reality(String adress_reality) {
        this.adress_reality = adress_reality;
    }

}

updated1:

当我使用它时,它显示错误:

enter image description here

updated2:

enter image description here

这是错误:

enter image description here

6 个答案:

答案 0 :(得分:0)

     Object address = cn_address.get(0);      
     ChineseAddressBean chineseaddressbean = (ChineseAddressBean)address;     
     System.out.println(chineseaddressbean.getAdress_reality());       

以上几行是您实现目标所需要的。如果有效,请告诉我。

答案 1 :(得分:0)

Meybe你需要在你的类实例中创建方法toString()。

答案 2 :(得分:0)

cn_address.get(0)返回一个对象,您应该将其转换为字符串

答案 3 :(得分:0)

显然,你在cn_address中获得了类“ChineseAddressBean”的对象列表。对? 如果你这样做

列出cn_address = sd.getLastAddress(toNomber,last_2);
的System.out.println(cn_address.get(0));

它将占据列表中的第一个元素并打印出来。要打印它,它将尝试通过调用对象的toString方法将其转换为String。因此,如果您在类“ChineseAddressBean”中覆盖toString方法并返回您想要打印的内容,那么它将会起作用

答案 4 :(得分:0)

你的bean中没有toString()方法。

public String toString() {
   return adress_reality;
}

在您的示例中错过了您需要将从列表中检索到的对象强制转换为适当的类型。 所以:

System.out.println((ChineseAddressBean)cn_address.get(0));

答案 5 :(得分:0)

返回List您访问Object(不是ChineseAddressBean)。此外,当您打印它时,您调用默认的toString()方法,该方法返回类名,后跟哈希码。

您必须返回List<ChineseAddressBean>或将结果转换为ChineseAddressBean(您做错了)。

试试这个:

System.out.println(((ChineseAddressBean)(cn_address.get(0))).getAdress_reality());

您还可以为toString()编写ChineseAddressBean方法,该方法会返回地址字符串,然后您无需拨打getAdress_reality()