修剪Java字符串并在Sql Where子句中使用

时间:2017-04-02 12:58:17

标签: java sql jdbc

我正在尝试使用查询从MySQL数据库获取值,该查询从多个选择中获取值。问题是我使用StringBuilder根据我得到的值创建查询。如果你看到Where子句用于我的原因,每次获取一个新变量时,最后会添加一个逗号。

如何删除最后添加的逗号,因为它在sql查询中给出了错误。将不胜感激任何帮助。

String[] stat = req.getParameterValues("status");
StringBuilder sb = new StringBuilder(200);

if (stat != null) {

    for (int i = 0; i < stat.length; i++) {

        sb.append("'" + stat[i] + "',");

    }

    String app = "WHERE status in (" + sb.toString() + ")";
    String sqlquery = "SELECT * FROM Table " + app + ";";
}

结果查询:

SELECT * FROM Table 
   WHERE status in ('Deployed','PendingDisposal','Available','Reserved','Broken',);

我想摆脱“破碎&#39;

之后的最后一个逗号

6 个答案:

答案 0 :(得分:3)

你的问题最后是逗号,你可以像这样附加你的字符串:

String del = "";
for (int i = 0; i < stat.length; i++) {
    sb.append(del).append("'" + stat[i] + "'");
    del = ",";
}

但事实上,使用这种方式并不是一个好主意,因为它可能导致SQL注入或语法错误,您必须使用PreparedStatement作为示例:

for (int i = 0; i < stat.length; i++) {
    sb.append(del).append("?");
    del = ",";
}

try (PreparedStatement ps = connection.prepareStatement(sb) {
    for (int i = 0; i < stat.length; i++) {
       ps.setString(i, stat[i]);
    }
    ResultSet result = preparedStatement.executeQuery();//get results
    ...
}

答案 1 :(得分:1)

您可以使用Java 8流使用逗号连接字符串数组:

String joined = Arrays.asList(stat).stream()
    .map(s -> "'" + s + "'")
    .collect(Collectors.joining(", "));

但请注意,加入这样的字符串是一个非常糟糕的主意:您很容易受到SQL注入攻击,例如如果stat的其中一个元素是something like

'); DROP TABLES Table; --

最好使用PreparedStatement构建查询。 See this question

答案 2 :(得分:0)

需要更新你的for循环,你需要在数组中追加元素,直到它的第二个最后一个元素,并在循环外追加数组的最后一个元素。

for(int i=0;i<stat.length-1;i++){  // loop till second last element
sb.append("'"+stat[i]+"',"); //appends , at end 
}
sb.append("'"+stat[stat.length-1]+"'"); // append last element

答案 3 :(得分:0)

您可以使用deleteChartAt方法: sb.deleteCharAt(sb.length()-1);

例如:

String[] stat = req.getParameterValues("status");
StringBuilder sb = new StringBuilder(200);

if(stat!=null) {
    for(int i=0;i<stat.length;i++){
        sb.append("'"+stat[i]+"',");
    }
    sb.deleteCharAt(sb.length()-1); //---------> This will remove the last comma
    String app = "WHERE status in ("+sb.toString()+")";
    String sqlquery = "SELECT * FROM Table "+app+";";
}

答案 4 :(得分:-1)

尝试一下这个。

 for(int i=0;i<stat.length;i++){

        sb.append("'"+stat[i]+"'");
            if(i!=stat.length-1){
              sb.append(",");
            }

        }

答案 5 :(得分:-1)

试     String app =“WHERE status in(”+ sb.substring(0,sb.length() - 2)+“)”;