java - 我可以使用Java代码在sql语句(Oracle)的IN子句中传递一个字符串列表吗

标签 java sql oracle12c nested-table oracle-type

我可以使用 Java 代码在 sql 语句(Oracle 12c)的 IN 子句中传递一个字符串列表吗?

我的代码如下:

    Connection con= abc.getConnection();
    OracleConnection oracleConnection = null;
    OraclePreparedStatement ops=null;
    if (con.isWrapperFor(OracleConnection.class)){
           oracleConnection= con.unwrap(OracleConnection.class);  
        }else{
           // recover, not an oracle connection
        }
    PreparedStatement ps=oracleConnection.prepareStatement(sql);
    if (ps.isWrapperFor(OraclePreparedStatement.class)){
        ops= ps.unwrap(OraclePreparedStatement.class);  
        }else{
           // recover, not an oracle connection
        }
    List<String >Ids=new ArrayList<String>();
    Ids.add("12345");
    Ids.add("12346");
    java.sql.Array array1 = oracleConnection.createOracleArray("MY_NESTED_TABLE", Ids.toArray());
    ops.setArray(1, array1 );
    ResultSet rSet= ops.executeQuery();

我将我的 Oracle 嵌套表定义为:

创建或替换 TYPE MY_NESTED_TABLE AS TABLE OF VARCHAR2(8 BYTE);

我尝试执行的 sql 查询是:

  1. SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(?))
  2. SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(cast(? AS MY_NESTED_TABLE)))

没有异常(exception),只是我在结果集中没有得到任何数据。 我见过有人使用此代码与 PL/SQL 一起工作。它也应该与 SQL 语句一起使用吗?

最佳答案

测试了您的方法,它运行良好。请检查您的映射是否正确以及数据库中是否存在数据。

是的,你可以在sql语句中使用oracle数组。

How to create an oracle.sql.ARRAY object?

关于java - 我可以使用Java代码在sql语句(Oracle)的IN子句中传递一个字符串列表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46094269/

相关文章:

sql - 从具有创建日期的表中获取上周的数据

c# - 通过文本框将 SQL 数据插入 ASP.Net Web 应用程序中的表

database - 如何在 Azure postgresql 和 Prem oracle DB 之间进行双向数据同步

linux - 无法在 Linux 7 中安装 Oracle 数据库

java - 从java课本上画图

Java 8 并发 - 等待任务关闭执行器

java - 类在我的包中不是公共(public)的,无法从外部包访问

java - Android下载drawable到Arraylist<Integer>

mysql - 使用 SQL 计算字符串和 Group By 中字符的出现次数

java - 通用连接池 java JDBC Oracle 12c 的应用程序连续性