gpt4 book ai didi

java - Spring RowMapper 返回一个结果的 ArrayList

转载 作者:行者123 更新时间:2023-12-02 03:53:58 26 4
gpt4 key购买 nike

我正在使用 Spring Boot 构建连接到 Oracle DB 的 REST 服务。我也在使用 Spring JDBC。

我有以下代码:

jdbcCall.declareParameters(new SqlParameter("P_IN", OracleTypes.VARCHAR));
jdbcCall.declareParameters(new SqlOutParameter("P_OUT", OracleTypes.CURSOR, new ClientMapper()));

MapSqlParameterSource in = new MapSqlParameterSource().addValue("P_IN", "123");
Map out = jdbcCall.execute(in);
Client client = (Client) out.get("P_OUT");

程序仅返回一个结果,但当我执行代码时,出现以下错误:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.test.model.Client

在 Debug模式下,我可以看到 out.get("P_OUT") 返回带有 10 个对象的 ArrayList,第一个是我的 Client 对象,其他设置为

我很困惑,我做错了什么并需要解决它?

最佳答案

Procedure returns one result

Spring 如何知道这一点?它需要能够处理可以返回任意数量行的游标。对我来说,out.get("P_OUT") 是有道理的。返回一个列表。

In a debug mode I can see that out.get("P_OUT") returns ArrayList with 10 objects

我怀疑当您看到这 10 个对象时,您正在查看 ArrayList 使用的内部数组。 。尝试打印 size() ArrayList的。我希望打印出 1 .

ArrayList类可以在其内部数组的末尾保留空闲空间,以允许它快速添加元素。它还将跟踪数组中实际使用了多少元素。

因此,简而言之,您需要执行以下操作:

List<Client> clients = (List<Client>) out.get("P_OUT");
Client client = clients.get(0);

您可能还需要考虑在游标由于某种原因不返回任何数据的情况下添加一些错误处理。类型转换List<Client>也可能在您的 IDE 中显示为警告:a @SuppressWarnings("unchecked")注释应该解决这个问题。

关于java - Spring RowMapper 返回一个结果的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35648595/

26 4 0