Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jdbc 值为null时,MySQL SMALLINT列在java.lang.Short中返回0_Jdbc - Fatal编程技术网

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

Jdbc 值为null时,MySQL SMALLINT列在java.lang.Short中返回0,jdbc,Jdbc,我已经浏览过这篇文章,但还没有找到合适的文档 基本上,我在MySQL表中有一个列,用于保存年份值。该列的类型为SMALLINT该列可以为null,并且每当我使用resultset.getShort(“年份”)方法检索值(null)我得到一个0而不是预期的null值 年份值是bean的成员,这意味着我使用访问器方法,因此,当我使用CallableStatement对象并相应地设置占位符时,我会得到NullPointerException我知道这应该是意料之中的,但在某些情况下,我需要显式地将值设置

我已经浏览过这篇文章,但还没有找到合适的文档

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

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

这是默认行为,因为其他原语的包装类允许
null


映射到
SMALLINT
的正确类型是什么?或者我是否应该将列更改为
INT

您应该检查的值,以查看您读取的是NULL还是0。

我不知道这个库(或者Java),但我想我找到了代码并查看了一下。似乎
getShort
总是返回一个short,并且从不为null,但是您可以使用
wasNull
来检查上次检索的值是否为null。

检查JDBC文档<当相应的数据库列为空时,code>getShort()等返回0。之后需要调用
wasNull()
,检查它是否真的为null


这是有史以来最糟糕的API之一。

添加
-Dorg.apache.el.parser.pressure\u TO_ZERO=false
到您的apache启动配置中。

是的,似乎是这样,为什么会出现这种行为?我认为该库的创建者认为这很方便。getShort实际上是getString的包装器(如果字段为空,则返回null)。当字段为null或
'
时,getSHort返回0,但如果发生nullpointer异常,也返回0。所有这些检查都是为了检查各种您不需要执行的异常。图书馆会帮你处理这些。您所需要做的就是在(可能很少)不需要默认值0的情况下调用这个额外函数。这个决定(和其他决定)也是由作者在我链接的库的标题中描述的。是的,这很奇怪,因为
BigDecimal
类型返回
null
如果列值为null,但是
Integer
类型的行为方式似乎与
Short
相同。