我有一些带有特定值的字符串“String []”数组。我想动态地将该数组传递给SQL“IN”子句,如:
Select * from Employee where emp_name in (?);
这里“?”必须用String Array替换。我想在Java Class中这样做。我试过
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
但是它没有工作并且获得异常“SQLFeatureException”。
感谢!!!
答案 0 :(得分:2)
基本上,字段emp_name不是数组而是VARCHAR
,所以当你为它设置一个值时,它必须是一个字符串。因此,查询中只有1 ?
表示emp_name的单个可能值。你必须列出尽可能多的?
作为数组的长度,并用它们的值单独替换它们。
假设empNames是String[]
,您可以这样做以准备查询:
StringBuilder query = new StringBuilder("Select * from Employee where emp_name in (");
for (int i = 0; i < empNames.length; i++) {
if (i > 0) {
query.append(",");
}
query.append("?");
}
query.append(")");
这将设置?
的背后的个别值:
for (int i = 0; i < empNames.length; i++) {
pstmt.setString(i+1, empNames[i]);
}
答案 1 :(得分:1)
我们可以应用选择批处理来解决您的问题。参考:
答案 2 :(得分:0)
您可以使用StringBuilder通过迭代String数组来创建带有IN子句的查询。
我建议不要使用Arrays.toString()
的复杂性,除非你真的需要它。性能没有太大差异,因为需要迭代数组以创建String
文字。
在我的方法中,我们可以很好地控制数组的迭代,添加单引号和逗号等。