gpt4 book ai didi

java - SQLJ IN 语句支持

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:24 26 4
gpt4 key购买 nike

是否可以使用 SQLJ 来使用 SQL IN 语句?

我尝试将 IN 语句与 List<String> 结合使用或 String[]来表示变量的集合,但 SQLJ 表示它无法解析该对象。

Parameter object type is invalid for requested conversion.

这是我在 native SQL 中的查询:

SELECT * 
FROM CARS_TBL
WHERE CAR_BRAND IN ('AUDI', 'PEUGEOT');

在 Hibernate 环境中,我将使用以下查询来获得结果:

List<String> brandList = new ArrayList<String>();
String hql = "SELECT car FROM Car car WHERE car.carBrand IN (:brandList);"

但是,我必须使用 SQLJ,并且在 Oracle SQLJ 文档中,似乎没有类型支持数组或集合以这种方式使用。

在生成的代码的以下部分中抛出了 SQLJ 错误:

__sJT_stmt.setObject(2, brandList);

它尝试将集合/数组设置为对象,但由于不支持列表/数组,因此抛出异常。

知道我可以拥有可变数量的“汽车品牌”,您知道我如何使用 SQLJ 获得与 native 和 hibernate 查询相同的结果吗?

最佳答案

考虑到这不能直接用 JDBC 完成,并且考虑到 Oracle SQLJ 本身不支持 TABLEVARRAY 类型,您可以 通过欺骗 ojdbc 接受以下内容来获得成功:

String[] brandList = ...
ArrayDescriptor d =
ArrayDescriptor.createDescriptor("ORA_MINING_VARCHAR2_NT", con);
ARRAY array = new ARRAY(d, con, brandList);

#sql {
SELECT * FROM car WHERE car.carBrand IN (
SELECT COLUMN_VALUE FROM TABLE(:array)
);"
}

在哪里ORA_MINING_VARCHAR2_NT is a table type that is likely to be present on your Oracle installation .您显然可以用更合适的东西替换它。

另请参阅:pass array to oracle procedure .当然还有other ways to embed SQL in Java , 如果 SQLJ 不是必须的.​​..

关于java - SQLJ IN 语句支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com