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

wfauudbj  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(332)

在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; 我该怎么做?这是一个小例子,我有很多表和很多列,有时可能有一个空值。因此,替换查询的这一部分将是我能看到的最简单的选择。这是可以做到的还是我需要检查我所有的变量之前。非常感谢!
琳达

dfuffjeb

dfuffjeb1#

字符串串联和三元条件运算符。

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()) {
        ...
    }
}
5jdjgkvh

5jdjgkvh2#

你也可以试试 NULL-safe equal (IS DISTINCT FROM) 操作员 <=> ```
SELECT ID FROM some_table WHERE col1 <=> ? AND col2 <=> ? AND col3 <=> ?;

相关问题