使用JDBC优化PostgreSQL ANY语句

时间:2015-01-28 14:06:01

标签: java postgresql jdbc prepared-statement

PostgreSQL支持" ANY" SQL运算符是" IN"的一个非常好的替代品。我们的语句依赖于JDBC / PreparedStatements的Java程序员。例如,我们可以执行like this

,而不是创建包含数千个ID的长SQL字符串
final PreparedStatement statement = connection.prepareStatement(
     "SELECT my_column FROM my_table where search_column = ANY (?)"
);
final Long[] values = getValues();
statement.setArray(1, connection.createArrayOf("bigint", values));
final ResultSet rs = statement.executeQuery();

我最近偶然发现了一个interesting article声称在执行" ANY"通过改变这个条款:

"WHERE search_column = ANY (ARRAY[15368196, -- 11,000 other keys --)])"

对此:

"WHERE search_column = ANY (VALUES (15368196), -- 11,000 other keys --)"

问题

  1. PostgreSQL JDBC驱动程序使用哪种语法?我怀疑createArrayOf()方法正在创建一个ARRAY [] vs VALUES(),但我不知道如何验证这一点。
  2. 实际上,如果createArrayOf()方法正在创建ARRAY [],那么使用VALUES()的最佳方法是什么?
  3. 我不想做这样的事情:

    final PreparedStatement statement = connection.prepareStatement(
     "SELECT my_column FROM my_table where search_column = ANY (VALUES (?), (?), (?), ...)"
    );
    

    为什么我使用" ANY"更多背景/背景。条款可以在这里找到: PreparedStatement IN clause alternatives?

    提前致谢!

0 个答案:

没有答案