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

Posted

技术标签:

【中文标题】我可以使用Java代码在sql语句(Oracle)的IN子句中传递字符串列表吗【英文标题】:Can I pass a list of String in the IN clause of sql statement(Oracle) using Java code 【发布时间】:2018-02-16 01:39:40 【问题描述】:

我可以使用 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 查询是:

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

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

【问题讨论】:

【参考方案1】:

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

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

How to create an oracle.sql.ARRAY object?

【讨论】:

以上是关于我可以使用Java代码在sql语句(Oracle)的IN子句中传递字符串列表吗的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle SQL 上运行的通用语句:使用 Java 的数据库

从 Java 到 Oracle SQL 的翻译:将每个元素作为 SELECT 语句的结果使用到循环中[关闭]

Java Oracle jdbc SELECT 语句

C# 中的 Sql Parser 用于语法检查 Oracle 语句

Java中的Oracle Sql语句

Java JDBC