大佬教程收集整理的这篇文章主要介绍了Derby对NULL值的处理,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果在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之类的强类型数据库引擎),或者该引擎将进行隐式类型转换(如果可能)。
我是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,ADDRESS)
SELEct ?,?,?
from SYSIBm.SYSDUMMY1
因为这两个null
值没有关联的类型。解决的办法是写这样的东西:
insert into T_AUTHOR (
ID,cast(null as int),cast(null as varchar(500))
from SYSIBm.SYSDUMMY1
或分别这样
insert into T_AUTHOR (
ID,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,但我还@R_675_10739@解决方案。有没有人知道这些RDBMS的 稳定 , 通用的 解决方案?
@H_262_62@以上是大佬教程为你收集整理的Derby对NULL值的处理全部内容,希望文章能够帮你解决Derby对NULL值的处理所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。