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

Can I pass a list of String in the IN clause of sql statement(Oracle) using Java code

我可以使用 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 嵌套 Table 定义为:

创建或替换 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)))

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

测试了你的方法,它工作正常。请检查您的映射是否正确以及数据库中是否存在数据。

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

How to create an oracle.sql.ARRAY object?