我正在使用以下声明
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 -----”
答案 0 :(得分:3)
这应该有效:
PreparedStatement stmt = conn.prepareStatement(
"SELECT * FROM users WHERE username = any(?)");
String[] usernames = {"admin", "guest"};
stmt.setArray(1, conn.createArrayOf("varchar", usernames));
的回答
答案 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();