当值为null时,MySQL SMALLINT列在java.lang.Short中返回0

时间:2011-02-18 23:19:31

标签: jdbc

我已经克服了这个问题,但我找不到合适的文档。

基本上我在MySQL表中有一个用于保存年份值的列,列的类型为SMALLINT,列可以为null,每当我检索值(NULL)时使用方法resultset.getShort("year");我得到0而不是预期的null值。

年份值是bean的成员,这意味着我使用了访问器方法,因此当我使用CallableStatement对象并相应地设置占位符时,我得到NullPointerException我知道这应该是预期但有些情况下,我需要将值显式设置为null,例如未提供年份或用户输入字母或不是“年”的字符串

这是默认行为,因为基元的其他包装类确实允许null值。

映射到SMALLINT的正确类型是什么,还是应该将列更改为INT

4 个答案:

答案 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启动配置中。