PreparedStatement中的IN子句

时间:2015-01-29 13:22:48

标签: java oracle jdbc

我正在使用ojdbc6 jar,我想在PreparedStatement中使用In子句。

我使用了连接对象的createArrayOf(String,ArrayOfString)方法。

我收到错误为“不支持的功能”

我已经检查了此方法的实现中的PhysicalConnection类是

public Array createArrayOf(String s, Object aobj[]) throws SQLException {
        SQLException sqlexception = DatabaseError.createUnsupportedFeatureSqlException();
        sqlexception.fillInStackTrace();
        throw sqlexception;
    }

我已经检查了ojdbc14.jar这个方法。在该.jar文件中,此方法未定义。

请帮帮我,我必须使用哪个罐子?我想在PreparedStatement中实现In子句功能。

1 个答案:

答案 0 :(得分:0)

所以你想做点什么......

SELECT * FROM TAB WHERE ID IN ?

我过去遇到过类似的问题,并尝试过使用JDBC和Oracle的各种技巧(例如用户定义的类型等),但这就是我们最终的结果......

  1. 创建一个包含单个ID列的global temporary table(作用于会话 - ON COMMIT DELETE ROWS)

  2. 开始交易

  3. 使用批处理语句将所需的所有ID插入临时表

  4. 加入此表格以获取结果,例如......

    SELECT * FROM TAB T INNER JOIN MyTempTable X ON T.ID = X.ID

  5. 提交时,临时表被截断

  6. 如果您需要在同一个事务中执行其中的几个操作,请务必先从临时表中删除。

    (另外,我们在驱动程序版本和setArray等问题上遇到了很多问题,所以我们确定了这个问题)