我可以使用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 语句的结果使用到循环中[关闭]