我是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"));
}
但这似乎非常'骇人听闻'。有没有更好的方法呢?
谢谢
答案 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()
来测试您要查找的内容。