有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

如何删除添加的最后一个逗号,因为它在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',);

我想去掉“break”之后的最后一个逗号


共 (6) 个答案

  1. # 1 楼答案

    您可以使用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+";";
    }
    
  2. # 2 楼答案

    试试这个

     for(int i=0;i<stat.length;i++){
    
            sb.append("'"+stat[i]+"'");
                if(i!=stat.length-1){
                  sb.append(",");
                }
    
            }
    
  3. # 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
        ...
    }
    
  4. # 4 楼答案

    您可以使用Java 8 streams将字符串数组与逗号连接起来:

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

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

    '); DROP TABLES Table; --
    

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

  5. # 5 楼答案

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

  6. # 6 楼答案

    需要更新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