繁体   English   中英

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

[英]Using Java's JDBC PreparedStatement on a SQLite Database to query for NOT NULL

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

但这似乎很“骇人”。 有什么更好的方法吗?

谢谢

用于传递参数,而不是构建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);
}

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

"SELECT * FROM table WHERE column IS ?"

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

暂无
暂无

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

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