分享

JDBC ResultSet.getxxx(),基本数值型如何区分是0还是null

 instl 2015-04-09
        JDBC中,对于ResultSet.getInt(), getLong()等获取基本数值型的函数,如果数据库中该字段是null,则函数的返回值是0。函数的返回值类型就已经决定了,不管怎么弄,也不可能返回null。
        很多时候,通过在应用层限制不能在该字段中插入0值,可以实现是否为null的判断。如果应用无法限制,那该怎么办?
有一个勉强可用的方法:
1 在进行数值获取前,先通过ResultSet.getObject()来判断是否为null,这个函数可以明确地区分是null还是0;
2 如果不为null,则再通过ResultSet.getxxx()把值拿到,或者自己对ResultSet.getObject()返回的结果进行处理也可以。
从MySQL Connector/J的源码来看,getObject()返回的已经是进行解码并进行封装的基本值类对象,例如Integer,Long等。如果再通过ResultSet.getxxx()获取,Connector/J会再次进行解码,纯属浪费运算时间。

另一个方法是:
通过getxxx()把值拿到,然后通过wasNull()方法可确认刚获取到的值是否为null。这个方法能避免重复解码,也避免需要自己进行强制类型转换。唯一的限制是wasNull()方法只能在getxxx()后执行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多