我是Derby的新手,我注意到,就null
值而言,我面临着与使用DB2
RDBMS时类似的问题。Derby文档指出,null
值必须具有与之关联的类型(DB2最终在9.7版中被删除):
http://db.apache.org/derby/docs/10.7/ref/crefsqlj21305.html
现在,我试图在这里找到解决此问题的 一般
方法,因为这将成为我的数据库抽象库jOOQ的一部分。下面的示例仅记录了该问题。考虑其他任何(更复杂的)示例。以下内容不起作用:
insert into T_AUTHOR (
ID, FIRST_NAME, LAST_NAME,
DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS)
select
1000, 'Lukas', 'Eder',
'1981-07-10', null, null
from SYSIBM.SYSDUMMY1
也不做(这是jOOQ的实际工作):
insert into T_AUTHOR (
ID, FIRST_NAME, LAST_NAME,
DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS)
select ?, ?, ?, ?, ?, ?
from SYSIBM.SYSDUMMY1
因为这两个null
值没有关联的类型。解决的办法是写这样的东西:
insert into T_AUTHOR (
ID, FIRST_NAME, LAST_NAME,
DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS)
select
1000, 'Lukas', 'Eder',
'1981-07-10', cast(null as int), cast(null as varchar(500))
from SYSIBM.SYSDUMMY1
或分别这样
insert into T_AUTHOR (
ID, FIRST_NAME, LAST_NAME,
DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS)
select
?, ?, ?, ?, cast(? as int), cast(? as varchar(500))
from SYSIBM.SYSDUMMY1
但是通常,在Java中,null
应强制转换为哪种类型是未知的:
int
),但在此示例中将不起作用,因为您无法在中输入cast(null as int)
值ADDRESS
。cast(null as object)
出在大多数情况下都可以使用的代码。但是Derby没有object
类型。以前,这个问题一直困扰着我使用DB2,但我还没有找到解决方案。有没有人知道这些RDBMS的 稳定 , 通用的 解决方案?
如果在INSERT上使用VALUES子句,则不必强制转换NULL值:
insert into T_AUTHOR (
ID, FIRST_NAME, LAST_NAME,
DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS)
VALUES (
1000, 'Lukas', 'Eder',
'1981-07-10', null, null
);
这将按您期望的方式工作(即数据库可以确定NULL对应于整数和varchar(500)。这在DB2和Derby中都可以工作(并且在几乎所有其他数据库引擎中也应工作)。
您也可以将VALUES与参数标记一起使用,而无需CAST它们。
发出insert into ... select from
语句时必须强制转换的原因是SELECT部分优先-
select语句返回某些数据类型,无论它们是否与您要插入它们的表兼容。如果它们不兼容,您将得到一个错误(使用DB2 <=
9.5之类的强类型数据库引擎),或者该引擎将进行隐式类型转换(如果可能)。
我正在研究从数据库中获取数据并构建协议buff消息的东西。鉴于某些字段可以从数据库中获取空值的可能性,我将在尝试构建协议buff消息时获得空指针异常。了解到线程http://code.google.com/p/protobuf/issues/detail?id=57的原型不支持null,我想知道处理NPE被抛出的唯一方法是否是将手动检查插入到与原型对应的java文件中,如下所示! 那么,有人能澄清
我有一个联系人列表,显示在API响应的Future Builder列表视图中,我在服务器中总共有23个联系人,但我想去掉其名字和姓氏为NULL的所有联系人。 在处理空异常之前:单击此处 代码: 处理空异常后:单击此处 正如您从添加的代码和图像中看到的,为了处理异常,我只为所有名为null的联系人返回了一个空的容器,但现在我想更改它。我如何才能使那些名为firstname和lastname的联系人不
我有一个一对一的关系之间的用户(pengganas)表和角色表,但当我在控制器中访问它返回null和列未找到 Route.php PenggunaController.php 使用App\Pengguna; 迁移 创建_penggunas_表 创建\u角色\u表 模型 Pengguna.php Role.php 因此,在PenggunaController.php的方法索引上,我正在获取id=3的
问题内容: 我有以下代码: 然后,我尝试: 返回行抛出错误: {“将值\“ \”转换为类型’System.Double’时出错。“} 在线上有许多解决方案建议使用空值类型创建自定义,但这对我不起作用。我不能指望json是某种格式。我无法控制列数,列类型或列名。 问题答案: 您可以提供设置来告诉它如何处理空值(在这种情况下,还有更多):
我试图使用Spring Data JDBC持久化一个包含嵌入式对象的对象。它不会被保存,因为它没有通过NULL检查。 我创建了一个外部类来持久化。 有什么方法可以保存一个空的/空的嵌入对象吗?
我有时区POJO如下: 我在Spring Controller中有如下updateTimeZone方法: 当我通过以下请求时: 然后,当映射到POJO时,它会自动将其他值转换为默认值,并变为: 因此,当我如下更新此POJO时 它自动覆盖TimeZone=null和小时差异=0.0, 那么有没有什么方法可以让我在@Request estbody中的TimeZoneDto只包含我在请求JSON中传递的