вернет ноль с требуемым типом.
ичок в Derby и заметил, что сталкиваюсь с такими же проблемами, как и при использовании СУБД DB2, посколькуnull
ценности обеспокоены. Документация 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
.С HSQLDB (другой кандидат на эту проблему) я могу просто написатьcast(null as object)
который будет работать в большинстве случаев. Но у Дерби нетobject
тип.Эта проблема раздражала меня в DB2 раньше, и я пока не нашел решения. Кто-нибудь знает остабильный, а такжеГенеральная Решение этой проблемы для любой из этих RDBMS?
дербиDB2