在应用hibernate开发中遇到了一个问题:oracle数据库中某字段(number类型)没有值(即null),其映射的javabean对应属性为int类
前言:空(null)和零(0)一样吗?当然不。null表示不存在或不确定,0表示没有。
在应用hibernate开发中遇到了一个问题:oracle数据库中某字段(number类型)没有值(即null),其映射的javabean对应属性为int类型。在获取数据时,提示“将null值赋给基本类型失败”的错误。怎么解决呢?对我这个.net转java的新手来说还真有点晕。
1.先来谈谈int和integer
int永远也不会为空,因为它是primitive数据类型。初始时缺省为0,而不是null。
integer是对象类,倒可能是null。
因此
int i1;
integer i2;
此时
i1==0 为true
i2==0 会出错吧
i2==null为true
2.修改int为integer的解决方案
将配置文件改为:
javabean中做以下修改:
public void seta252(integer a252) {
if(a252 != null){
this.a252 = a252;
}
else{
this.a252 = 0;
}
}
3.jdbc的解决方案
string result = rs.getstring(1);
if (result != null){
a252 = integer.parseint(result);
}
else{
a252 = 0;
}
4.装箱、拆箱及其他
类型转换是在1.5中才有的。在明白怎么进行判断之前,,我们必须明白所谓的类型转换到底是什么东西。在1.5之前,你如果需要把一个int转换为integer,你就必须做new integer(intvalue);这样的代码工作。因此在1.5中,java的缔造者们认为这种方法过于低效率,因此引入了c#中的auto-boxing理念,因此你可以用类型转换的方法创造出一个integer类实例。但是,其中的原理还是和以前一致的。因为在int类型中,永远不可能有null的取值,因此也不可能生成一个null的integer对象。
另外可以强制转换下,也就是 (object)int x == null;