1

我正在使用以下语句

select * 
from table 
where column1 in(groups)

其中“groups”是一个大小为 n 的字符串数组。如果我按原样使用它,它不会被执行,所以任何人都可以建议确切的查询来执行这个吗?
编辑 1
如果我使用以下代码

try{
   System.out.println("before execute query");
  ps1.setArray(1,conn.createArrayOf("text",gs));
  ps1.setArray(2,conn.createArrayOf("text",gs));
  System.out.println("after execute query");
  }
  catch(Exception e)
  {
   System.out.println("hrer----"+e);
  }

首先,它打印“执行查询之前”,然后给出以下异常

javax.servlet.ServletException:servlet execution threw an exception

*注意:*它不会在 catch(Exception e) 块中打印“hrer-----”

4

2 回答 2

3

这应该有效:

PreparedStatement stmt = conn.prepareStatement(
    "SELECT * FROM users WHERE username = any(?)");

String[] usernames = {"admin", "guest"};
stmt.setArray(1, conn.createArrayOf("varchar", usernames));

归功于鲍里斯在https://stackoverflow.com/a/10240302上的回答

于 2012-06-14T11:12:16.010 回答
2
select * from table where column1 in (?, ?)

除了你有n问号。

StringBuilder q = new StringBuilder("select * from table where column1 in (");
for(int i=0; i<groups.length; i++) {
    q.append("?");
    if(i != groups.length - 1) {
        q.append(",");
    }
}
q.append(")");
PreparedStatement query = con.prepareStatement(q.toString());
for(int i=1; i<=groups.length; i++) {
    query.setString(i, groups[i-1]);
}
ResultSet rs = query.getResultSet();
于 2012-06-14T10:13:59.533 回答