我有以下代码请求4参数,然后从它们创建查询。
String reason = request.getParameter("REASON");
String task = request.getParameter("TASK");
String result = request.getParameter("RESULT");
String resultCause = request.getParameter("RESULT_CAUSE");
public boolean isRowInTable(String reason, String task, String result, String resultCause)
throws BusinessException {
PreparedStatement prepStmt = null;
ResultSet rs = null;
StringBuffer queryB = new StringBuffer("");
Boolean rowExists = null;
queryB.append("select ")
.append("* ").append("from ")
.append("TABLE_NAME ").append("where ")
.append("REASON = '").append(reason)
.append("' AND TASK = '").append(task)
.append("' AND RESULT = '").append(result);
if (!(resultCause == "")) {
queryB.append("' AND RESULT_CAUSE = '").append(resultCause);
}
queryB.append("'");
.
.
.
}
创建查询时,页面上的resultCause参数可能为空,因此在谷歌查询空请求后,我发现在这种情况下该值将为空字符串:“”。因此,在检查时,如果数据库中存在该行,我会尝试相应地转换查询,并且如果它不为空,则仅附加where caluse。但似乎我在这里做错了什么。我是否以正确的方式检查结果?
答案 0 :(得分:0)
我在此处看到错误resultCause == ""
这应该是正确的陈述
resultCause == null || resultCause.isEmpty()
答案 1 :(得分:0)
您必须使用equals("")
:
if (!(resultCause.equals(""))) {..}
或者您可以使用isEmpty()
:
if (!(resultCause.isEmpty())) {..}
但是您的解决方案可以为您提供语法错误,或 SQL注入,而您必须使用PreparedStatement,例如:
queryB.append("select * from TABLE_NAME where REASON = ? AND TASK = ? AND RESULT = ?");
if (!(resultCause.isEmpty())) {
queryB.append(" AND RESULT_CAUSE = ?");
}
prepStmt= connection.prepareStatement(queryB);
prepStmt.setString(1, reason);
prepStmt.setString(2, task);
prepStmt.setString(3, result);
if (!(resultCause.isEmpty())) {
prepStmt.setString(4, resultCause);
}
答案 2 :(得分:0)
试试这个
if (!(resultCause.equals("")))
答案 3 :(得分:0)
也许只是像
这样的东西String query = String.format("select * from TABLE_NAME
where REASON = ? AND TASK = ? AND RESULT = ?%s",
resultCause.isEmpty()? "" : "AND RESULT_CAUSE = ?");
作为PreparedQuery
的查询字符串?