yuwenhan1 2017-02-12 02:07 采纳率: 0%
浏览 1056

java程序访问oracle出现数据类型转换异常,求大神指点

首先看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,但是查询给出的数据都是正确的,但是这张表有上面问题,求大神指点。

  • 写回答

1条回答

  • devmiao 2017-02-13 18:28
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题