Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JAVA中从字符串的arraylist创建逗号分隔的单引号字符串_Java_Arrays_Arraylist - Fatal编程技术网

如何在JAVA中从字符串的arraylist创建逗号分隔的单引号字符串

如何在JAVA中从字符串的arraylist创建逗号分隔的单引号字符串,java,arrays,arraylist,Java,Arrays,Arraylist,在Java中,我需要在MS SQL上启动一个类似的查询 select * from customer where customer.name in ('abc', 'xyz', ...,'pqr'); 但是我有一个以字符串的ArrayList形式存在的IN子句值。例如:列表看起来像{“abc”、“xyz”、…、“pqr”} 我准备了一份声明: PreparedStatement pStmt = conn.prepareStatement(select * from customer

在Java中,我需要在MS SQL上启动一个类似的查询

select * from customer 
where customer.name in ('abc', 'xyz', ...,'pqr');
但是我有一个以字符串的ArrayList形式存在的IN子句值。例如:列表看起来像{“abc”、“xyz”、…、“pqr”}

我准备了一份声明:

 PreparedStatement pStmt = conn.prepareStatement(select * from customer 
    where customer.name in (?));
String list= StringUtils.join(namesList, ",");
pStmt.setString(1,list);
rs = pStmt.executeQuery();
但是列表类似于“abc,xyz,…,pqr”,但我希望它是“'abc','xyz',…,'pqr'” 这样我就可以把它传给你

如何在没有GUAVA助手库的情况下在JAva中实现它


提前谢谢

即使您按照自己的意愿格式化字符串,它也不会工作。不能将
PreparedStatement
中的一个占位符替换为多个值

您应该动态构建
PreparedStatement
,以使占位符的数量与输入列表中的元素数量相同

我会这样做:

StringBuilder scmd = new StringBuilder ();
scmd.append ("select * from customer where customer.name in ( ");
for (int i = 0; i < namesList.size(); i++) {
  if (i > 0)
    scmd.append (',');
  scmd.append ('?');
}
scmd.append (")");
PreparedStatement stmt = connection.prepareStatement(scmd.toString());

if (namesList.size() > 0) {
    for (int i = 0; i < namesList.size(); i++) {
        stmt.setString (i + 1, namesList.get(i));
    }
}
rs = stmt.executeQuery();
StringBuilder scmd=新的StringBuilder();
scmd.append(“从customer中选择*,其中customer.name位于(”);
对于(int i=0;i0)
scmd.append(',');
scmd.append(“?”);
}
scmd.append(“)”;
PreparedStatement stmt=connection.prepareStatement(scmd.toString());
如果(namesList.size()>0){
对于(int i=0;i
要转换字符串,可以尝试以下操作:

String list= StringUtils.join(namesList, "','");
list = "'" + list + "'";

但是我不认为为多个参数传递一个字符串是一个好主意。

我想最简单的方法是使用这样的表达式语言:

 String[] strings = {"a", "b", "c"};
 String result = ("" + Arrays.asList(strings)).replaceAll("(^.|.$)", "\'").replace(", ", "\',\'" );

对于这种类型的活动,可以使用简单的分隔符。基本上,您需要一个第一次计算结果为“”但在第一次请求返回定义字符串后更改的对象

public class SimpleSeparator<T> {
  private final String sepString;
  boolean first = true;

  public SimpleSeparator(final String sep) {
    this.sepString = sep;
  }

  public String sep() {
    // Return empty string first and then the separator on every subsequent invocation.
    if (first) {
      first = false;
      return "";
    }
    return sepString;
  }

  public static void main(String[] args) {
    SimpleSeparator sep = new SimpleSeparator("','");
    System.out.print("[");
    for ( int i = 0; i < 10; i++ ) {
      System.out.print(sep.sep()+i);
    }
    System.out.print("]");
  }

}
公共类SimpleSeparator{
私有最终字符串sepString;
布尔值优先=真;
公共SimpleSeparator(最终字符串sep){
this.sepString=sep;
}
公共字符串sep(){
//首先返回空字符串,然后在每次后续调用时返回分隔符。
如果(第一){
第一个=假;
返回“”;
}
返回字符串;
}
公共静态void main(字符串[]args){
SimpleSeparator sep=新的SimpleSeparator(“,”);
系统输出打印(“[”);
对于(int i=0;i<10;i++){
系统输出打印(sep.sep()+i);
}
系统输出打印(“]);
}
}

我知道这是一篇非常古老的文章,但万一有人想知道如何用Java 8实现这一点:

private String join(List<String> namesList) {
    return String.join(",", namesList
            .stream()
            .map(name -> ("'" + name + "'"))
            .collect(Collectors.toList()));
}
私有字符串联接(列表名称列表){
返回字符串。join(“,”,名称列表
.stream()
.map(名称->(“'”+name+“”))
.collect(Collectors.toList());
}
列表名称列表=。。。
String result=nameList.stream().collect(收集器.joining(“,”,“,”,“,”));

我无法检查它,但是
stringlist=StringUtils.join(namesList,“,”)呢?这就是我要找的。非常感谢。
List<String> nameList = ...    
String result = nameList.stream().collect(Collectors.joining("','", "'", "'"));