在JDBC中访问ResultSet时,是否有一种优雅的方法来区分空值和实际零值?

Uri*_*Uri 5 java jdbc resultset

当使用JDBC并通过结果集访问基本类型时,是否有一种更优雅的方式来处理null/0而不是以下:

int myInt = rs.getInt(columnNumber)
if(rs.wasNull())?
{
 // Treat as null
} else
{
 // Treat as 0
}
Run Code Online (Sandbox Code Playgroud)

每当我看到这种代码时,我个人都会畏缩.我没有看到为什么没有定义ResultSet来返回盒装的整数类型(可能除了性能)或者至少提供两者.如果有人能说服我当前的API设计很棒,那么奖励积分:)

我的个人解决方案是编写一个返回Integer的包装器(我更关心客户端代码的优雅而不是性能),但我想知道我是否错过了更好的方法来执行此操作.

只是为了澄清一下,对于这段代码困扰我的不是长度,而是它在后续调用之间创建状态依赖性的事实,以及看似简单的getter实际上在同一行中有副作用的事实.

ska*_*man 8

JDBC API是为性能而设计的.请记住,它可以追溯到Java 1.1,当对象的大量转换是JVM杀手时(直到Java 1.2+中的Hotspot JVM才能放松这种限制).使用盒装类型会破坏当时大批量应用程序的性能.

现在,由于向后兼容性,它无法更改.所以不,它不再理想,但解决方法是一个非常小的事情.

如果你想避免你提到代码的类型,你可以随时使用getObject(),而不是getInt(),它将返回的亚型之一的目标java.lang.Number,很可能Integer还是BigInteger取决于特定的SQL类型.