将复合键列表作为参数传递给查询?

时间:2012-09-06 09:41:23

标签: java sql sql-server-2008 jdbc

我们的遗留系统包含表格T,其中包含复合键 - 两列AB,我需要搜索符合我的条件A == x AND B == y的行。

但是对于(x,y) {(x1,y1), (x2,y2), (x3,y3)}的一组操作

如果我X = {x1,x2x3}Y = {y1,y2,y3}

select A,B,value from T where A in (X) and B in (Y)

我的结果可能包含行x1, y2, valueN,但这不正确

我没有touples计数的上限,我需要将它作为Java代码中的参数传递。

我的服务器是MS SQL 2008

看起来表值参数可能是答案,但JDBC驱动程序尚不支持它

(希望这很清楚)

2 个答案:

答案 0 :(得分:0)

您可以使用的一种方法是将值转换为字符串并将它们连接起来

答案 1 :(得分:0)

有几种解决方案:

使用检查组合的语句:

SELECT A, B, value FROM T WHERE A = X1 AND B = Y1 OR A = X2 AND B = Y2

使用预准备语句并单独查询每个组合(注意:在此处使用Java 7 try-with-resources)

try (PreparedStatement pstmt = con.prepareStatement("SELECT A, B, value FROM T WHERE A = X1 AND B = Y1")) {
  for (Tuple tuple : tuples) {
    pstmt.setObject(1, tuple.X);
    pstmt.setObject(2, tuple.Y);
    try (ResultSet rs = pstmt.executeQuery()) {
      while (rs.next()) {
        // process however you like
      }
    }
  }
}
相关问题