问题描述
BeanProcessor.toBean
像这样的作品:
将ResultSet行转换为JavaBean。此实现使用反射和BeanInfo类将列名与bean属性名匹配。属性根据以下几个因素与列匹配:
- 该类具有与列同名的可写属性。名称比较不区分大小写。
- 可以使用ResultSet.get *方法将列类型转换为属性的set方法参数类型。如果转换失败(即,属性为int且列为Timestamp),则将引发SQLException。
从ResultSet返回SQL NULL时,原始bean属性设置为默认值。数字字段设置为0,布尔值设置为false。返回SQL NULL时,对象bean属性设置为null。这与ResultSet get *方法的行为相同。
地址可能不是可写属性。请检查一下。
解决方法
我正在使用以下内容将检索到的值添加到类中。所有值都将添加到该类的属性中,但是我正在使用compisition(在类中具有class的对象),并且在输出中不显示任何内容。
class employee
{
....
private Address address = new Address();
.....
}
...
Employee emp = new Employee();
try {
ps = con.prepareStatement("select * from employee,address "
+ "WHERE employee.username = ? AND "
+ "employee.ADD_ID = address.ID");
ps.setString(1,username);
ResultSet r = ps.executeQuery();
if (r.next()) {
BeanProcessor bp = new BeanProcessor();
emp = bp.toBean(r,Employee.class);
System.out.println("blockkkk:"+emp.getAddress().getBlock());
//output of above line is blockkkk:null
}
con.close();
ps.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return emp;
地址类别如下:
public class Address {
.....
private String block;
....
public String getBlock() {
return block;
}
public void setBlock(String block) {
this.block = block;
}
....
}