以下MySQL查询是等效的:
select * from TableA where (column1, column2) in ( ('name1', 60), ('name2', 65) )
select * from TableA where (column1='name1' and column2=60) or (column1='name2' and column2=65)
然而,行构造函数表单(即第一个示例)的强大之处在于,您可以使用它来处理查询任意长度的值对列表.如果没有它,就必须编写动态sql,这是一种安全风险.使用第一种形式可以避免这个棘手的问题.
然而,如何在JDBC中使用准备好的语句来表示这一点?例如:
Connection connection = ...
PreparedStatement smt = connection.preparedStatement("select * from TableA where (column1,column2) in ?");
smt.setObject(1, whatDataTypeGoesHere );
smt.execute();
我已经研究了setArray
,但是如何在数组的值中表示column1
和column2
个值呢?我想知道SQLData
接口是否可以作为管道.但是读了这些文件,我看不出这是怎么回事.