HSQLDB是否支持setArray查询中的谓词?

问题描述 投票:0回答:1

假设您要通过JDBC连接对HSQLDB实例发出如下查询:

select * from employees where lastname in ('Stauder', 'Brugger', 'Wieser');

挑战:名称列表各不相同(值的数量以及值本身),我们想使用PreparedStatement

根据this answer,执行此操作的正确方法是:

PreparedStatement statement = connection.prepareStatement(
    "select * from employees where lastname in (?)");
/* modify the following line to determine the values dynamically */
Array array = statement.getConnection().createArrayOf("VARCHAR",
    new Object[]{"Stauder", "Brugger", "Wieser"});
statement.setArray(1, array);
ResultSet rs = statement.executeQuery();

但是,注释表明并非所有的JDBC驱动程序都支持此功能。 HSQLDB docs说从[2.0]版本开始支持setArray(),但是我不清楚这是否意味着上面的示例可以正常工作,特别是将此结构与in谓词一起使用。谁能对此有所启发?

jdbc hsqldb
1个回答
0
投票

直接从HSQLDB Documentation中取出,这就是您应该这样做的方式。 (@fredt的主要道具,因为他实际上有完全正确的答案)。

 String sql = "select * from employees where lastname in (UNNEST(?))";
 PreparedStatement ps = connection.prepareStatement(sql)
 Object[] data = new Object[]{"Stauder", "Brugger", "Wieser"};
 // default types defined in org.hsqldb.types.Type can be used
 org.hsqldb.types.Type type = org.hsqldb.types.Type.SQL_VARCHAR_DEFAULT;
 JDBCArrayBasic array = new JDBCArrayBasic(data, type);
 ps.setArray(1, array);
 ResultSet rs = ps.executeQuery();
© www.soinside.com 2019 - 2024. All rights reserved.