gpt4 book ai didi

java - JDBC - 选择列为 NULL 的位置

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:19 24 4
gpt4 key购买 nike

我的 Postgres 9.0 数据库中有一个简单的表:

create table test (id int not null, value int);

我用几行填充了它:

insert into test values (1, 1);
insert into test values (2, null);
insert into test values (3, null);
insert into test values (4, 1);

现在我正在尝试使用 JDBC 读取它。当我通过 value 列中的非空值进行选择时,一切正常:

PreparedStatement select = c.prepareStatement("select * from test where value=?");
select.setInt(1, 1);
return select.executeQuery();

但是当我想选择 value 为 null 的行时,结果集中不包含任何行。我已经尝试了这两种方法:

select.setObject(1, null);

select.setNull(1, Types.INTEGER);

都不行!

这是怎么回事?我知道检查 NULL 的正确 SQL 是 where value is null 而不是 where value=null 但 JDBC 肯定足够聪明,可以帮我解决这个问题?

最佳答案

没有什么是 = NULL。如果您在交互式查询计算器中键入 select * from test where value=NULL,您将什么也得不到。 JDBC 不会重写您的表达式,它只是替换值。

您必须使用 is 运算符代替查询:

PreparedStatement select = c.prepareStatement("select * from test where value is NULL");
return select.executeQuery();

您说过您希望 JDBC 足够“聪明”来为您做这件事,但这将严重违反关注点分离。您可能希望在查询中使用 = 设置一个参数 NULL,因为您知道该关系永远不会计算为真(作为一组更大的条件,很可能)。

关于java - JDBC - 选择列为 NULL 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com