我已经克服了这个问题,但我找不到合适的文档。
基本上我在MySQL表中有一个用于保存年份值的列,列的类型为SMALLINT
,列可以为null,每当我检索值(NULL
)时使用方法resultset.getShort("year");
我得到0
而不是预期的null
值。
年份值是bean的成员,这意味着我使用了访问器方法,因此当我使用CallableStatement
对象并相应地设置占位符时,我得到NullPointerException
我知道这应该是预期但有些情况下,我需要将值显式设置为null
,例如未提供年份或用户输入字母或不是“年”的字符串
这是默认行为,因为基元的其他包装类确实允许null
值。
映射到SMALLINT
的正确类型是什么,还是应该将列更改为INT
?
答案 0 :(得分:1)
我不知道这个库(或Java,就此而言),但我想我找到了代码here并且看了一眼。似乎getShort
总是返回一个short,并且永远不会为null,但您可以使用wasNull
来检查上次检索的值是否实际为null。
答案 1 :(得分:1)
检查JDBC文档。当相应的数据库列为空时,getShort()
等返回0。之后你需要调用wasNull()
以检查它是否真的为空。
这是最破碎的 API之一 EVER 。
答案 2 :(得分:0)
您应该检查resultSet.wasNull
的值以查看是否读取了NULL或0。
答案 3 :(得分:0)
将-Dorg.apache.el.parser.COERCE_TO_ZERO=false
添加到您的apache启动配置中。