java - 如何将字符串数组动态传递给 Java 中的 SQL "IN"子句?

标签 java sql

<分区>

我有一组具有特定值的字符串“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]);
}

关于java - 如何将字符串数组动态传递给 Java 中的 SQL "IN"子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20278790/

相关文章:

java - Spring Boot - 数据库中不能仅创建一个实体

java - 关于 Spring Transaction 配置和传播的查询

mysql - 什么是相当于 Oracle 的 'start with...connect by' 的标准 SQL 查询,但不是特定于 DBMS 的

sql - 重命名索引错误参数@objname不明确

sql - 合并并添加两个表中的值

java - 如何生成不重复的随机字符串数组 url?

java - spring-roo maven项目不支持特殊字符

Java XPath API - 获取表示子树的字符串

sql - 按正数和负数计算排名

SQL分组步骤