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 来做到这一点。但是我从 Java World中找到了一篇文章,可以帮助您创建自己的类(NamedParameterStatement)来实现这一点。

于 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 回答