解决Java中int不能为空而Oracle数据库中Number可以的问题
2012-11-15 13:19
148 查看
原文:/article/8575591.html
前言:空(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的解决方案
将配置文件改为:<property name="a252" type="java.lang.Integer">
JavaBean中做以下修改:
[java] view
plaincopy
public void setA252(Integer a252) {
if(a252 != null){
this.a252 = a252;
}
else{
this.a252 = 0;
}
}
3.JDBC的解决方案
[java] view
plaincopy
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;
前言:空(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的解决方案
将配置文件改为:<property name="a252" type="java.lang.Integer">
JavaBean中做以下修改:
[java] view
plaincopy
public void setA252(Integer a252) {
if(a252 != null){
this.a252 = a252;
}
else{
this.a252 = 0;
}
}
3.JDBC的解决方案
[java] view
plaincopy
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;
相关文章推荐
- 解决Java中int不能为空而Oracle数据库中Number可以的问题
- 解决Java中int不能为空而Oracle数据库中Number可以的问题
- 解决java poi导出excel2003不能超过65536行的问题(java.lang.IllegalArgumentException: Invalid row number (65536) o)
- 可空类型"int?" 解决: 【数据库里的int类型可以为null,而在c#里int类型不能为Nul】的问题
- 解决在oracle数据库中使用hibernate生成表不能正确创建表的问题
- 多找方法, 少找借口, 总有人可以找到问题的解决办法, 为什么不能是你我呢?---不能抓日志场景下如何抓到日志?
- 分享一下jdk重装后,javac命令可以执行,但java命令不能执行的解决方式
- 解决Java7下JTextPane不能自动换行的问题
- java 解决split分割空值不能得到的问题
- 每日一得--解决tomcat 5.5 不能识别 JSP的EL表达,但tomcat 7.0 可以的问题
- Java小程序---接口中抽象方法的实现(解决了JAVA语言不能多继承的问题)
- java 解决split分割空值不能得到的问题
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
- Ubuntu下MySQL不能连接问题的解决 MESSAGE: java.net.ConnectException: Connection refused
- 【java web】解决流读完一次就不能再次获取body数据的问题
- oracle数据库不能登录em问题的解决方法
- JAVA学习提高之----Propert文件不能保存中文的问题及解决
- windows7系统windows XP系统ps2针孔老式键盘开机不能使用驱动出现感叹号--亲自测试可以解决问题
- HBase单机模式配置以及不能创建表问题的解决方法(Caused by: java.net.ConnectException: Connection refused)
- 艰辛的aptana插件安装之路(续)--成功解决myeclipse不能启动和报java.lang.NullPointerException的问题