繁体   English   中英

替换 java 准备的 mysql 查询语句中的字符串?

[英]replace string in java prepared mysql query statement?

在我的 java 代码中,我想使用 SELECT 语句从表中检索 ID。 为此,我使用 prepareStatement java 功能。

PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, entry1);
pst.setString(2, entry2);
pst.setString(3, entry3);
ResultSet rs = pst.executeQuery();

entry1、entry2 和 entry3 是变量。 然而,其中一些变量可以为“null”。 所以我的 sql 语句就变成了:

SELECT ID FROM some_table WHERE col1="val1" AND col2="val2" AND col3=null;

此查询将失败,因此我必须将查询更改为:

SELECT ID FROM some_table WHERE col1="val1" AND col2="val2" AND col3 IS NULL;

我该怎么做呢? 这是一个小例子,我有很多表和很多列,有时可能有 null 值。 因此,替换这部分查询将是我能看到的最简单的选择。 可以这样做还是我需要先检查所有变量。 非常感谢!

琳达

字符串连接和三元条件运算符。

String sql = "SELECT ID" +
              " FROM some_table" +
             " WHERE col1 " + (entry1 != null ? "= ?" : "IS NULL") +
               " AND col2 " + (entry2 != null ? "= ?" : "IS NULL") +
               " AND col3 " + (entry3 != null ? "= ?" : "IS NULL");
try (PreparedStatement pst = con.prepareStatement(sql)) {
    int paramIdx = 0;
    if (entry1 != null)
        pst.setString(++paramIdx, entry1);
    if (entry2 != null)
        pst.setString(++paramIdx, entry2);
    if (entry3 != null)
        pst.setString(++paramIdx, entry3);
    try (ResultSet rs = pst.executeQuery()) {
        ...
    }
}

您还可以尝试NULL-safe equal (IS DISTINCT FROM)运算符<=>

SELECT ID FROM some_table WHERE col1 <=> ? AND col2 <=> ? AND col3 <=> ?;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM