首先看oracle里面的House表,其中linkman为varchar2类型,其他都为number类型
一、House表里面一些数据
id hid area price floor linkman
1 1 20 800 7 张三
二、下面是House实体类,给出一部分代码,变量类型这样设置应该没错吧,oracle表里面的number,java里面的数据类型应该设置为BigDecimal吧,varchar2对应String,这个我测试过可以。因为待会用反射类Field里面的set方法帮我们把从数据库查找到的数据自动转换为实体类对应变量类型。
public class House {
private BigDecimal id;
private BigDecimal area;
private BigDecimal price;
private BigDecimal floor;
private String linkMan;
private BigDecimal hid;
private BigDecimal qid;
private BigDecimal jid;
private BigDecimal zid;
private BigDecimal sid;
public House() {
super();
}
public House(BigDecimal id, BigDecimal area, BigDecimal price, BigDecimal floor, String linkMan,BigDecimal hid,BigDecimal qid,BigDecimal jid,BigDecimal zid,BigDecimal sid) {
super();
this.id = id;
this.area = area;
this.price = price;
this.floor = floor;
this.linkMan = linkMan;
this.hid=hid;
this.qid=qid;
this.jid=jid;
this.zid=zid;
this.sid=sid;
}
三、House实现类
public class HouseImpl extends JDBC implements HouseDao {
@Override
public List<House> HidFind(int id) {
String sql="select * from house where hid=? ";
List<House> list=query(sql, House.class, id);
return list;
}
@Override
public House IdFind(int id) {
String sql="select * from house where id=?";
List<House> list=query(sql, House.class, id);
return list.get(0);
}
@Override
public List<House> FindAll() {
String sql="select * from house";
List<House> list=query(sql, House.class);
return list;
}
}
四、测试类
@Test
public void testHouseImplHidFind(){
System.out.println(hs.HidFind(1).get(0).getPrice().doubleValue());
}
@Test
public void testHouseImplIdFind(){
System.out.println(hs.IdFind(1).getPrice().doubleValue());
}
刚测试testHouseImplHidFind()方法,就报错,错误如下:
java.lang.IllegalArgumentException: Can not set java.lang.String field bean.House.linkMan to java.math.BigDecimal
我把linkman类型改为BigDecimal类型,它又报错说hid应该为String类型,于是我又按照它说的改了,运行没报错了,但是查price时给我的是20.0,linkman给我的是一个1(反正是数字),我一下子懵逼了,我其他表里面有number和varchar2,但是查询给出的数据都是正确的,但是这张表有上面问题,求大神指点。