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 に答える