gpt4 book ai didi

java - 在 PreparedStatement 中绑定(bind)空变量

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:59 26 4
gpt4 key购买 nike

我发誓这曾经有效,但在本例中并非如此。我正在尝试匹配 col1、col2 和 col3,即使其中一个或多个为空。我知道在某些语言中,我不得不求助于诸如 ((? is null AND col1 is null) OR col1 = ?) 之类的绕口令。这里需要吗?

        PreparedStatement selStmt = getConn().prepareStatement(
"SELECT * " +
"FROM tbl1 " +
"WHERE col1 = ? AND col2 = ? and col3 = ?");
try
{
int col = 1;
setInt(selStmt, col++, col1);
setInt(selStmt, col++, col2);
setInt(selStmt, col++, col3);
ResultSet rs = selStmt.executeQuery();
try
{
while (rs.next())
{
// process row
}
}
finally
{
rs.close();
}
}
finally
{
selStmt.close();
}

// Does the equivalient of stmt.setInt(col, i) but preserves nullness.
protected static void setInt(PreparedStatement stmt, int col, Integer i)
throws SQLException
{
if (i == null)
stmt.setNull(col, java.sql.Types.INTEGER);
else
stmt.setInt(col, i);
}

最佳答案

这可能取决于 JDBC 驱动程序,但在大多数情况下,是的,您需要使用上面显示的更扩展的形式。

JDBC 准备语句通常是围绕参数化查询的 native 实现的相对较薄的包装器,即带有 ?代替参数传递给查询编译器并编译,因此,稍后,当您调用 stmt.executeQuery() 时,无法从 column = ? 调整语句至 column IS NULL .这与其说是 JDBC 的限制,不如说是它的限制 the semantics of NULL in SQL .对于 SQL x = NULL未定义 x <> NULL .

也就是说,一些 JDBC 驱动程序可能违反了 NULL 的概念。 SQL 中的 -ity 并允许 setNull() 转换来自 = ? 的语句至 IS NULL这将是非常不标准的行为(尽管它可以通过编写某种查询预处理方法轻松实现)。

关于java - 在 PreparedStatement 中绑定(bind)空变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649997/

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