Postgresql查询这种情况?

时间:2012-06-14 10:10:11

标签: postgresql jdbc

我正在使用以下声明

select * 
from table 
where column1 in(groups)

其中“groups”是大小为n的String数组。 如果我按原样使用它,它不会被执行,所以任何人都可以提出确切的查询来执行此操作吗? 编辑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(例外e)块中打印“hrer -----”

2 个答案:

答案 0 :(得分: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

的回答

答案 1 :(得分: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();