热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java返回int型的空值,从JavaResu检查nullint值

从JavaResu检查nullint值在Java中,我试图从ResultSet中测试一个空值,其中列被转换为原始int类型。intiVal;Result

从Java Resu检查null int值

在Java中,我试图从ResultSet中测试一个空值,其中列被转换为原始int类型。

int iVal;

ResultSet rs = magicallyAppearingStmt.executeQuery(query);

if (rs.next()) {

if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {

iVal = rs.getInt("ID_PARENT");

}

}

从上面的代码片段,有更好的方法来做到这一点,我假设第二个isNull()测试是多余的?

教育我们,谢谢

ian_scho asked 2019-03-03T17:21:58Z

9个解决方案

305 votes

当字段值为NULL时,iVal的默认值是返回0,这也是iVal声明的默认值。 在这种情况下,您的测试完全是多余的。

如果你真的想要做一些不同的事情,如果字段值是NULL,我建议:

int iVal = 0;

ResultSet rs = magicallyAppearingStmt.executeQuery(query);

if (rs.next()) {

iVal = rs.getInt("ID_PARENT");

if (rs.wasNull()) {

// handle NULL field value

}

}

(编辑为@martin评论如下;编写的OP代码无法编译,因为iVal未初始化)

Richard answered 2019-03-03T17:22:23Z

72 votes

另一种方案:

public class DaoTools {

static public Integer getInteger(ResultSet rs, String strColName) throws SQLException {

int nValue = rs.getInt(strColName);

return rs.wasNull() ? null : nValue;

}

}

Patrice IMBERT answered 2019-03-03T17:22:43Z

26 votes

我认为,这是多余的。 rs.getObject("ID_PARENT")应返回Integer对象或null,如果列值实际为NULL.所以甚至应该可以执行以下操作:

if (rs.next()) {

Integer idParent = (Integer) rs.getObject("ID_PARENT");

if (idParent != null) {

iVal = idParent; // works for Java 1.5+

} else {

// handle this case

}

}

Andreas_D answered 2019-03-03T17:23:11Z

20 votes

只需检查字段是否为ResultSet#getObject()或不使用ResultSet#getObject()。用您想要的任何空值大小替换Integer。

int foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : -1;

或者,如果您可以保证使用正确的DB列类型,以便ResultSet#getObject()确实返回Integer(因此不是Long,Short或Byte),那么您也可以将其类型转换为Integer。

Integer foo = (Integer) resultSet.getObject("foo");

BalusC answered 2019-03-03T17:23:46Z

8 votes

你可以简单地使用AFAIK

iVal = rs.getInt("ID_PARENT");

if (rs.wasNull()) {

// do somthing interesting to handle this situation

}

即使它是NULL。

Peter Tillemans answered 2019-03-03T17:24:21Z

1 votes

为方便起见,您可以在ResultSet周围创建一个包装类,当ResultSet通常不会返回空值时返回空值。

public final class ResultSetWrapper {

private final ResultSet rs;

public ResultSetWrapper(ResultSet rs) {

this.rs = rs;

}

public ResultSet getResultSet() {

return rs;

}

public Boolean getBoolean(String label) throws SQLException {

final boolean b = rs.getBoolean(label);

if (rs.wasNull()) {

return null;

}

return b;

}

public Byte getByte(String label) throws SQLException {

final byte b = rs.getByte(label);

if (rs.wasNull()) {

return null;

}

return b;

}

// ...

}

Jacob Crofts answered 2019-03-03T17:24:49Z

1 votes

只是Java Generics的更新。

您可以创建一个实用程序方法,以从先前生成的给定ResultSet中检索任何Java类型的可选值。

不幸的是,getObject(columnName,Class)不返回null,而是返回给定Java类型的默认值,因此需要2次调用

public T getOptionalValue(final ResultSet rs, final String columnName, final Class clazz) throws SQLException {

final T value = rs.getObject(columnName, clazz);

return rs.wasNull() ? null : value;

}

在此示例中,您的代码可能如下所示:

final Integer columnValue = getOptionalValue(rs, Integer.class);

if (columnValue == null) {

//null handling

} else {

//use int value of columnValue with autoboxing

}

很高兴得到反馈

luchoct answered 2019-03-03T17:25:45Z

0 votes

使用java 8,您可以这样做:

Long nVal = Optional.ofNullable(resultSet.getBigDecimal("col_name"))

.map(BigDecimal::longValue).orElse(null));

在这种情况下,如果SQL值为NULL,则确保nVal为空(而不是零)

George answered 2019-03-03T17:26:21Z

-5 votes

如果您控制SQL,另一种检查的好方法是在int列的查询本身中添加一个默认值。 然后检查该值。

例如,对于Oracle数据库,请使用NVL

SELECT NVL(ID_PARENT, -999) FROM TABLE_NAME;

然后检查

if (rs.getInt('ID_PARENT') != -999)

{

}

当然,这也是假设存在通常在列中找不到的值。

Chris answered 2019-03-03T17:27:10Z



推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
九育
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有