我有一组具有特定值的字符串“String[]”。我想将该数组动态传递给 SQL“IN”子句,例如:
Select * from Employee where emp_name in (?);
这里“?”必须替换为字符串数组。我想在 Java 类中执行此操作。我试过
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
但它不工作并出现异常“SQLFeatureException”。
谢谢!!!
基本上,字段 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]);
}