[英]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.