【发布时间】:2011-02-24 14:37:44
【问题描述】:
在 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");
}
}
从上面的代码片段中,有没有更好的方法来做到这一点,我假设第二个wasNull() 测试是多余的?
教育我们,谢谢
【问题讨论】:
-
我发现了这个问题,因为我在数据库中有一个可为空的列,并且它在 Java 中由整数表示。您会认为在数据库中有一个可以为空的数值列会很常见,结果集 API 会更优雅地适应它。
-
我不会将此作为答案发布,因为它是切线的,远非普遍:我通常的解决方案是将
IF(colName = NULL, 0, colName) AS colName放在SELECT语句中(最好在存储过程中)。从哲学上讲,这归结为数据库是否应该符合应用程序,反之亦然。由于 SQL 可以轻松处理 NULL,而许多 SQL 使用者却不能(即java.sql.ResultSet),因此我选择尽可能在数据库中处理它。 (当然,这假设在概念上 NULL 和零对于您的目的是等效的。) -
您可以在 SQL 中轻松完成此操作,而无需担心 SQL
NULL和 Javanull。只需编写... IS NOT NULL并将其作为 JDBC 中的boolean值检索。