1

我是 Java 中 PreparedStatement 的新手,我似乎无法找到解决问题的最佳解决方案。我想查询表中为 NULL 或 NOT NULL 的记录。

在阅读PreparedStatement (Java Platform SE 6)时,我意识到我需要使用setNull方法,但是我没有看到设置 NOT NULL 的方法?

例如:

SELECT * FROM table WHERE column IS NULL

我假设我会做的是:

public void query(boolean getNull) {
    String querySql = "SELECT * FROM table WHERE column IS ?";
    sqlStatement = connection.prepareStatement(querySql);
    if(getNull)
        sqlStatement.setNull(1, Types.VARCHAR);
    else
        ???;
}

但是我将如何做 else 语句?没有 setNotNull 方法。我想我可以这样做:

public void query(boolean getNull) {
    String querySql = "SELECT * FROM table WHERE column IS ? NULL";
    sqlStatement = connection.prepareStatement(querySql);
    sqlStatement.setString(1, (getNull ? "" : "NOT"));
}

但这似乎很“骇人听闻”。有没有更好的方法来做到这一点?

谢谢

4

2 回答 2

1

? 用于传递参数,而不是构建 SQL。(部分取自这里

我建议您仅将参数用于值,而不是字段或[IS] NULL(任何类似的东西)。

只需连接字符串。如果您有多个参数,则应查看StringBuilder.

public void query(boolean getNull) {
    String querySql = "SELECT * FROM table WHERE column IS ";
    if(getNull) {
        querySql += "NULL";
    } else {
        querySql += "NOT NULL";
    }      
    sqlStatement = connection.prepareStatement(querySql);
}

也可以使用一种可能的方法String.format(...),例如:

public void query(boolean getNull) {
    String querySql = String.format("SELECT * FROM table WHERE column IS %s NULL", (getNull ? "" : "NOT")); 
    sqlStatement = connection.prepareStatement(querySql);
}
于 2013-03-05T22:59:01.387 回答
0

一种方法是查看查询返回的结果集:

"SELECT * FROM table WHERE column IS ?"

使用 PreparedStatement 将值设置为 NULL,然后执行查询。您可以使用resultset.next()来测试您要查找的内容。

于 2013-03-05T22:38:24.117 回答