Java 将字符串数组值传递给条件中的sql
我有一个字符串数组Java 将字符串数组值传递给条件中的sql,java,servlets,Java,Servlets,我有一个字符串数组 String[] val=request.getParameterValues("Names"); for(int i=0;i<val.length;i++){ //printval[i]; } 理想情况下,我希望字符串数组值在sql条件下的内部传递。这非常简单 试试看: import org.apache.commons.lang3.StringUtils; StringUtils.join(new String[] {"Hello", "World"
String[] val=request.getParameterValues("Names");
for(int i=0;i<val.length;i++){
//printval[i];
}
理想情况下,我希望字符串数组值在sql条件下的内部传递。这非常简单
试试看:
import org.apache.commons.lang3.StringUtils;
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ");
您将使用逗号连接字符串,您可以将查询构造为筛选器,并将此查询附加到主查询
StringBuilder sb= new StringBuilder();
String filter = "";
String[] val=request.getParameterValues("Names");
for(int i=0;i<val.length;i++){
//printval[i];
sb.append( "'"+val[i]+"'," );
}
filter = sb.ToString();
filter = filter.substring(0, filter.length()-1);
sql = "where dept_name in("+filter+")";
StringBuilder sb=新建StringBuilder();
字符串过滤器=”;
字符串[]val=request.getParameterValues(“名称”);
对于(int i=0;i这应该可以做到:
StringBuilder csvStr = new StringBuilder();
for(int i=0;i<val.length;i++){
if (val.length > 1 && i !=0) {
csvStr.append(",");
}
csvStr.append ("'").append(val[i]).append("'");
}
System.out.println(csvStr);
然后将数组从JDBC传递到
Object[] dept = {"Dev","QA", "Support"};
Array deptArray = connection.createArrayOf("VARCHAR", dept);
preparedStatement.setArray(idx, deptArray);
为什么您不能使用StringBuilder
来构建一个预先准备好的语句?可能是您想让我忘记将val作为数组,您可以再试一次吗?谢谢,我将尝试这种方法。“从表(?)中选择列\u值”如何应该适合这里吗?sql中的for循环和附加值问题是安全问题,因为它可能会导致sql注入问题。如果仍要使用,则应使用encode literals。column_值将是oracle创建的标量嵌套表的伪列。
sql = "where dept_name in (".concat(csvStr.toString()).concat(")");
sql = "where dept_name in(select column_value from table(?))";
Object[] dept = {"Dev","QA", "Support"};
Array deptArray = connection.createArrayOf("VARCHAR", dept);
preparedStatement.setArray(idx, deptArray);