我们的遗留系统包含表格T
,其中包含复合键 - 两列A
和B
,我需要搜索符合我的条件A == x AND B == y
的行。
但是对于(x,y)
1}}等{(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驱动程序尚不支持它
(希望这很清楚)
答案 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
}
}
}
}