3
private String QUERY = "(SELECT * FROM tab1 WHERE year = ? and month = ?) UNION (SELECT * FROM tab2 WHERE year = ? and month = ?) UNION (SELECT * FROM tab3 WHERE year = ? and month = ?");

aPreparedStatement = connection.prepareStatement(QUERY);
aPreparedStatement.setString(1, "2012");
aPreparedStatement.setString(2, "july");
aPreparedStatement.setString(3, "2012");
aPreparedStatement.setString(4, "2012");
aPreparedStatement.setString(5, "july");
aPreparedStatement.setString(6, "2012");

「?」を何度も設定するのではなく、複数の setString メソッドを実行して、PreparedStatement で同じものを置き換えるのを避ける方法はありますか?

4

3 に答える 3

6

次のようなヘルパー メソッドを作成できます。

void setString(PreparedStatement pstmt, String s, Integer... indices) {
    for (Integer index : indices) {
        pstmt.setString(index, s);
    }
}

そして、次のように呼び出します。

setString(aPreparedStatement, "2012", 1, 3, 4, 6);
setString(aPreparedStatement, "july", 2, 5);
于 2012-07-16T16:07:19.200 に答える
1

私の知る限り、標準の PreparedStatements では実行できません。しかし、これを実現するために独自のクラス (NamedParameterStatement) を作成するのに役立つJava World の記事を見つけました。

于 2012-07-16T15:51:56.773 に答える
-1

ループを使ってみることができます。

for (int i=0; i < 3; i++) {
  aPreparedStatement.setString(2*i+1, "2012");
  aPreparedStatement.setString(2*i+2, "july");
}
于 2012-07-16T15:42:43.760 に答える