Java 如何传递空数据类型?
将无数据的值传递到数据库时,Java 如何传递空数据类型?,java,.net,database,null,Java,.net,Database,Null,将无数据的值传递到数据库时,NULL的数据类型是什么?NULL是“未定义”的值。因此,数据库中的任何类型都可以是“未定义的”,因为它是列的属性:特定列的行的值可以是“未定义的”,这意味着它是“NULL”,无论类型是什么。只要该列可为空 我认为DBNULL或NULL是一种特殊类型。有没有NULL的数据类型。NULL本身意味着缺少数据。当没有数据时,它怎么能有类型呢?通常NULL是它自己的数据类型-1的类型是“整数”,NULL的类型是“NULL”我认为这个问题本身是错误的。如果NULL有一个数据类型
NULL的数据类型是什么?NULL是“未定义”的值。因此,数据库中的任何类型都可以是“未定义的”,因为它是列的属性:特定列的行的值可以是“未定义的”,这意味着它是“NULL”,无论类型是什么。只要该列可为空 我认为DBNULL或NULL是一种特殊类型。有没有NULL的数据类型。NULL本身意味着缺少数据。当没有数据时,它怎么能有类型呢?通常NULL是它自己的数据类型-1的类型是“整数”,NULL的类型是“NULL”我认为这个问题本身是错误的。如果NULL有一个数据类型,那么您不会被迫在其默认值之外的每个实例化中更改它。例如,当您将其创建为角色,然后将其强制为对象的值时
NULL==NULL
仅此而已。NULL
可以强制转换(转换)为任何数据类型,但是与NULL
的数据类型比较总是返回FALSE
NULL
的数据类型与0
的数据类型一样没有意义:它可以是整数
、浮点
或VARCHAR
。您不能仅从值来区分它
NULL
在几乎所有数据类型域中都是合法值,这意味着没有实际值
在某些RDBMS
的上下文之外讨论数据类型也是毫无意义的
例如,在SQLite
中,数据类型是值绑定的,而不是列绑定的,NULL
本身就是一类数据类型
在Oracle中,数据类型的定义更加严格。例如,此查询可以工作:
SELECT COALESCE(dt, i)
FROM (
SELECT CAST(NULL AS DATE) AS dt, CAST(NULL AS DATE) i
FROM dual
) q
这并不是:
SELECT COALESCE(dt, i)
FROM (
SELECT CAST(NULL AS DATE) AS dt, CAST(NULL AS NUMBER) i
FROM dual
) q
,因为后一个查询返回两列不同的数据类型,它们的值都为NULL
,COALESCE
要求两个参数具有相同的数据类型
最好说任何数据类型的NULL
都可以隐式转换为另一个数据类型的NULL
例如,如果VARCHAR
的值为0
,则可以将其隐式转换为整数,但如果其值为“某些字符串”
,则不能将其转换为
对于NULL
,任何数据类型都可以隐式转换为任何其他数据类型,只要它们之间允许隐式转换。NULL在SQL中没有特定的数据类型。任何可为null的列或变量都可以包含null。Null永远不等于或不等于任何东西。您可以将一个包含null的变量强制转换为另一个变量并获取null,例如:
declare @a integer
set @a = null
select convert (float, @a)
----------------------
NULL
(1 row(s) affected)
实际上,在PowerShell中,比较$null-eq$null会得到False。
另外,-not$null将为True,所以这里它似乎被表示为False。我知道,PowerShell可能不是一个很好的例子,但是:)在SQL中,NULL是一个可以应用于任何SQL类型的“标记”(非值)。因此它与类型正交。通常SQLNULL
没有与其关联的类型。但也有例外。数据库引擎postgresql和derby(javadb)要求null具有类型。换句话说,它们不支持非类型化null。因此像NULL为NULL这样的查询条件可能会失败。这里,NULL
必须指定一个类型,即处理NULL
值的目标的预期类型。在这种情况下,这看起来很愚蠢,因为没有目标,这可能会适得其反
看
看到和
请为这些问题投票,以便奇数数据库引擎改变它们的方式。Prabhahar,每种类型的数据库驱动程序都有自己的处理方式NULL
。您必须检查特定数据库的驱动程序API
例如,如果您正在使用Java Derby数据库,只需传入Java本机类型null,如所示:
以下是另一个null
示例:
是的,这就是我加入公司时必须学习的东西。NULL是不存在的,它不是一个类型,但是它可以用类型来表示(即.NET framework使用DBNull.Value作为NULL值的表示)。是的,我同意。在任何技术中,你都必须有某种东西来代表它。(你不能一无所有地代表一无所有)。但作为一个概念,NULL表示“无”。真的@Hemant,虽然这是一个很好的空数据库定义,但抽象概念由实际值表示。假设Prabhahar希望将某些编程语言中的值传递给数据库,那么将有一个关联的数据库驱动程序API,该API将实现传递NULL.-1,因为与NULL的比较将导致NULL而不是FALSE。在PL/SQL中的IF语句中,NULL被视为FALSE,但NOT NULL是NULL,NOT true WHERE子句等也是如此。冒着相反的风险,大多数完全支持NULL的平台会将NULL返回到比较“NULL==NULL”,事实上不是true:)这使得上述比较无效,因为与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
);
pst.setNull(4, java.sql.Types.INTEGER);