我正在尝试使用查询从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;
之后的最后一个逗号答案 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)+“)”;