java - PreparedStatement 中的 IN 子句

标签 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 文件中,未定义此方法。

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

最佳答案

所以你想做一些类似的事情......

SELECT * FROM TAB WHERE ID IN ?

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

  1. 创建 global temporary table包含单个 ID 列(范围仅限于 session - ON COMMIT DELETE ROWS)

  2. 开始交易

  3. 使用批处理语句将您想要的所有 Id 插入临时表

  4. 加入此表即可获取结果,例如...

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

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

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

(此外,我们在驱动程序版本和 setArray 等方面遇到了很多问题,因此我们决定这样做)

关于java - PreparedStatement 中的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215844/

相关文章:

java - 在oracle中的数字字段中输入空值

mysql - 查询以从 3 个不同的表中获取不同键的数据

sql - pl/sql - 集合可以遍历列名吗?

java - 可滚动的结果集 JDBC Postgresql

java - 如何获取本地安装的KDB数据库的URL

java - 设置 SQLite 列默认值时如何使用字符串常量

java - 在 Android 中将对象添加到 ArrayList 时出现 NullPointerException

Java:包含 2 个小数的字符串到 int/double/anything

java - 为什么将类设为泛型时 "Incompatible types"编译错误会变成警告?

java - 在 servlet 和 JSP 之间共享静态数据时选择什么最佳策略?