Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring行映射器返回一个结果的ArrayList_Java_Spring_Oracle_Jdbc_Spring Jdbc - Fatal编程技术网

Java Spring行映射器返回一个结果的ArrayList

Java Spring行映射器返回一个结果的ArrayList,java,spring,oracle,jdbc,spring-jdbc,Java,Spring,Oracle,Jdbc,Spring Jdbc,我正在使用SpringBoot构建连接到OracleDB的REST服务。我正在使用SpringJDBC 我有以下代码: jdbcCall.declareParameters(new SqlParameter("P_IN", OracleTypes.VARCHAR)); jdbcCall.declareParameters(new SqlOutParameter("P_OUT", OracleTypes.CURSOR, new ClientMapper())); MapSqlParameterS

我正在使用SpringBoot构建连接到OracleDB的REST服务。我正在使用SpringJDBC

我有以下代码:

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
在调试模式下,我可以看到
out.get(“p_out”)
返回带有10个对象的
ArrayList
,第一个对象是我的客户机对象,其他对象设置为
null

我很困惑,我做错了什么,为什么要修复它

过程返回一个结果

春天是怎么知道的?它需要能够处理可以返回任意行数的游标。对我来说,
out.get(“P_out”)
返回一个列表是有道理的

在调试模式下,我可以看到
out.get(“p_out”)
返回带有10个对象的
ArrayList

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

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

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

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

您可能还想考虑在光标不管什么原因都不返回数据的情况下添加一些错误处理。转换到

列表
也可能在IDE中显示为警告:
@SuppressWarnings(“未选中”)
注释应该解决这个问题

过程返回一个结果

春天是怎么知道的?它需要能够处理可以返回任意行数的游标。对我来说,
out.get(“P_out”)
返回一个列表是有道理的

在调试模式下,我可以看到
out.get(“p_out”)
返回带有10个对象的
ArrayList

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

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

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

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

您可能还想考虑在光标不管什么原因都不返回数据的情况下添加一些错误处理。对

列表的强制转换也可能在IDE中显示为警告:一个
@SuppressWarnings(“未选中”)
注释应该解决这个问题。

谢谢,这很有帮助!我还意识到它返回一个列表是非常有意义的。也许我们应该考虑程序出参数,因为我们知道它应该总是返回一个并且只有一个结果,并且out参数不应该是光标。谢谢,这很有帮助!我还意识到它返回一个列表是非常有意义的。也许我们应该考虑过程的参数,因为我们知道它应该总是返回一个并且只有一个结果,并且out参数不应该是游标。