从java中重用PrepareStatement中的参数

时间:2012-07-16 15:31:54

标签: java sql prepared-statement

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");

而不是一次又一次地设置“?”相同的参数,有没有什么方法可以避免在PreparedStatement中使用多个setString方法替换相同的方法?

3 个答案:

答案 0 :(得分:5)

你可以做一个辅助方法,如下所示:

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);

答案 1 :(得分:1)

据我所知,你不能用标准的PreparedStatements来做。但我发现Article from Java World可以帮助您创建自己的类(NamedParameterStatement)来实现此目的。

答案 2 :(得分:-1)

您可以尝试使用循环。

for (int i=0; i < 3; i++) {
  aPreparedStatement.setString(2*i+1, "2012");
  aPreparedStatement.setString(2*i+2, "july");
}