BeanUtils.copyProperty的用法问题
我想写一个类,把Database的ResultSet封装一下。用了BeanUtils.copyProperty方法,总是报如下错误:
USING CONVERTER org.apache.commons.beanutils.converters.IntegerConverter@1befab0
java.lang.reflect.InvocationTargetException: Cannot set id
at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:449)
at org.apache.commons.beanutils.BeanUtils.copyProperty(BeanUtils.java:129)
Caused by: java.lang.NoSuchMethodException: Property 'id' has no setter method
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1746)
at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:447)
可是,UserInfo这个bean里面明明有set方法,而且是public,eclipse总是报错说找不到set方法。
有知道为什么的么?
下面为代码:
USING CONVERTER org.apache.commons.beanutils.converters.IntegerConverter@1befab0
java.lang.reflect.InvocationTargetException: Cannot set id
at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:449)
at org.apache.commons.beanutils.BeanUtils.copyProperty(BeanUtils.java:129)
Caused by: java.lang.NoSuchMethodException: Property 'id' has no setter method
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1746)
at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:447)
可是,UserInfo这个bean里面明明有set方法,而且是public,eclipse总是报错说找不到set方法。
有知道为什么的么?
下面为代码:
/**
*
* @author wcharry
*
*/
public class MyDataSet {
private static Log log = LogFactory.getLog(MyDataSet.class);
private List list = new ArrayList();
public MyDataSet(ResultSet rs) {
try {
dumpResultSet(rs);
} catch (SQLException e) {
e.printStackTrace();
}
}
public MyDataSet(ResultSet rs, Class clazz) {
try {
dumpResultSet(rs, clazz);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int size() {
return list.size();
}
public Object get(int i) {
return list.get(i);
}
public Object get(int row, int col) {
HashMap hm = (HashMap) list.get(row);
Iterator iterator = hm.values().iterator();
int iCol = 0;
while (iterator.hasNext()) {
if (iCol == col)
return iterator.next();
iCol++;
}
return null;
}
public Object get(int row, String key) {
HashMap hm = (HashMap) list.get(row);
return hm.get(key);
}
private void dumpResultSet(ResultSet rs, Class clazz) throws Exception {
ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
int colCount = metaData.getColumnCount();
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().equalsIgnoreCase(
metaData.getColumnName(i).replaceAll("_", ""))) {
log.info("f.getName:" + f.getName());
// 这里总是报错
BeanUtils.copyProperty(newInstance, f.getName(),
value);
log.info("value:" + value);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
list.add(newInstance);
}
}
/**
* @param args
*/
public static void main(String[] args) {
String sql = "SELECT * FROM users";
ResultSet rs = DatabaseFactory.getInstance("mysql").executeQuery(sql);
MyDataSet ds2 = new MyDataSet(rs, UserInfo.class);
for (int i = 0; i < ds2.size(); ++i) {
UserInfo o = (UserInfo) ds2.get(i);
System.out.println(o.getUser());
}
DatabaseFactory.getInstance("mysql").closeConnection();
}
}
class UserInfo {
private int id;
private String user;
private String password;
public UserInfo() {
}
// public String toString() {
// return "id:" + id + ", user:" + user;
// }
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
...全文
相关推荐
beanUtils , CopyProperty
apache 的 beanutil 包含了一些在实体属性转换的方法,如 copyProperties(P1,P2);
Commons beanutils组件简介
主要介绍了commons beanutils组件的相关内容,以及部分实例和基本用法,需要的朋友可以参考下
beanutils JAR包下载
beanutils-1.8.3 JAR包下载
改进的BeanUtil包
修改内容:<br>1.org.apache.commons.beanutils.converters包下增加了UtilDateConverter类<br>2.修改了org.apache.commons.beanutils.converters包下的StringConverter类<br>3.ConvertUtilsBean类中的public void deregister()方法末尾下加入了register(java.util.Date.class, new UtilDateConverter());<br>支持BeanUtils的copyProperty方法对String与java.util.Date互转<br><br>
struts 整合笔记
这个笔记我用了一个月整合的,里面基本上有全部的struts内容,希望大家相互学习讨论,不错的笔记哈,


Java SE

