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

Java 是否将复合键列表作为参数传递给查询?,java,sql,sql-server-2008,jdbc,Java,Sql,Sql Server 2008,Jdbc,我们的传统系统有一个带有复合键的表T——两列A和B,我需要搜索符合我的条件的行,即A==x和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、值n,但这是不正确的 我并没有touple计数的上限,我需要将其作为Java代码中的参数传递 我的服务器是MS SQL 2008

我们的传统系统有一个带有复合键的表
T
——两列
A
B
,我需要搜索符合我的条件的行,即
A==x和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、值n
,但这是不正确的

我并没有touple计数的上限,我需要将其作为Java代码中的参数传递

我的服务器是MS SQL 2008

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


(希望这足够清楚)

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

有几种解决方案:

使用检查组合的语句:

SELECT A, B, value FROM T WHERE A = X1 AND B = Y1 OR A = X2 AND B = Y2
使用一个准备好的语句,分别查询每个组合(注意:使用Java7,请在此处使用参考资料进行尝试)


问题是如何做到这一点没有黑客,但感谢你的想法
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
      }
    }
  }
}