当前位置: 首页 > 面试题库 >

如何在JDBC中从resultSet中读取可能为null的double值?

鲁涵意
2023-03-14
问题内容

我的数据库中有一列被键入,double并且我想使用JDBC
ResultSet从中读取值,但是它可能为null。最好的方法是什么?我可以想到三个选项,但似乎没有一个很好。

选项1:不好,因为异常处理冗长而有臭味

double d;
try {
   d = rs.getDouble(1);
   // do something
} catch(SQLException ex) {
   if(rs.wasNull()) {
      // do something else
   } else {
     throw ex;
   }
}

选项2:不好,因为两次提取

s = rs.getString(1); // or getObject()
if(s == null) {
  // do something else
} else {
  double d = rs.getDouble(1);
  // do something
}

选项3:不好,因为Java而不是SQL转换

s = rs.getString(1); // or getObject()
if(s == null) {
  // do something else
} else {
  double d = Double.parseDouble(s);
  // do something
}

关于哪种方法更好的任何建议,或者还有另一种更好的方法?并且请不要说“ Use Hibernate”,这里只限于JDBC代码。


问题答案:

选项1最接近:

double d = rs.getDouble(1);
if (rs.wasNull()) {
  // do something
} else {
  // use d
}

这不是很好,但这是JDBC。如果该列为空,则将double值视为“错误”,因此,wasNull()每次读取数据库中可为空的原语时,都应检查使用。



 类似资料:
  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我对我的一个本地C类中的空值“this”感到困惑。 我这样声明stdafx.h中的类: 然后像这样stdafx.cpp实现它: 调试器阻塞了这个方法,并抛出一个“写访问冲突”:消息还说:“这是nullptr”。 这怎么可能?我该如何解决这个问题?下面是完整的“归档”标题和定义。 备案. h: 归档.cpp

  • 我收到一个错误消息,说从数据库返回的结果集内缺少某个< code>string。现在我有一个问题:我怎样才能看到结果集中的内容? google上可用的示例是显式方法,如或,但这些方法假设您知道您在寻找什么。我真正需要的是-查看中有哪些元素可用。 就像当我发出命令时,它会向我显示某种带有变量名的映射——这可能吗? 编辑: 如果有用,下面是一段代码: 错误:

  • 问题内容: 我在ResultSet上经历了一段非常糟糕的时光,它在while循环中关闭以迭代此ResultSet。我知道ResultSet关闭的确切行,但是我不知道为什么。 我用注释标记了该行,之后该行关闭了。上面示例中使用的其他方法,构造函数等都经过了正常测试。有谁知道为什么调用第二个方法会关闭第一个方法的线索? 问题答案: 问题在于,每个执行的语句只能维护一组。既然你共享同为你的两个方法,在该

  • 我在使用Spring通过java读取yaml时遇到了一个问题。让我先展示代码 我的yaml文件: spring上下文xml还具有以下功能: 在这里面,它说,所有的东西都是作为一个字符串而不是一个地图来阅读的。是否有其他类支持读取Yaml文件的方式:Spring boot-inject map from application.yml 还是我对YamlPropertiesFactoryBean的理解

  • 问题内容: 数据库具有UTC中的数据,当我尝试获取数据时 这有什么问题吗? 问题答案: 您的DateFormat实例很可能以本地时间显示该值。在显示您的价值时,尝试一下: 编辑:对您的评论: 如果我使用GMT,那在SimpleDateFormat中会是一个问题吗? SimpleDateFormat可以使用常规时区(GMT +/- n),RFC822和文本(如JavaDoc所述,“如果它们具有名称”