未检查Java request.getParameter条件

时间:2017-05-19 12:46:47

标签: java jdbc

我有以下代码请求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。但似乎我在这里做错了什么。我是否以正确的方式检查结果?

4 个答案:

答案 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的查询字符串?