在SQLite数据库上使用Java的JDBC PreparedStatement来查询NOT NULL

时间:2013-03-05 22:28:34

标签: java sqlite jdbc null prepared-statement

我是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"));
}

但这似乎非常'骇人听闻'。有没有更好的方法呢?

谢谢

2 个答案:

答案 0 :(得分:1)

?用于传递参数,而不是构建SQL。 (taken partially from here

我建议您仅将参数用于值,而不是字段或[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);
}

答案 1 :(得分:0)

执行此操作的一种方法是查看查询返回的结果集:

"SELECT * FROM table WHERE column IS ?"

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