首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SimpleJdbcCall用于MySql函数的输出“不能为存储函数调用的返回值设置IN参数”

SimpleJdbcCall用于MySql函数的输出“不能为存储函数调用的返回值设置IN参数”
EN

Stack Overflow用户
提问于 2019-01-28 21:34:08
回答 1查看 1.5K关注 0票数 1

使用Spring中的示例,我试图从mySQL函数返回一个值。我一直得到错误的Can't set IN parameter for return value of stored function call;

我创建了一个工作良好的mySQL函数(在MySQL工作台中运行)。我编写了一个SimpleJdbcCall语句,按照Spring示例设置参数,但始终得到这个错误。如果我将函数转换为一个过程,代码可以工作,我只需从结果集中检索返回值。

我以https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch13s05.html第13.5.8节作为参考。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE FUNCTION `ScenarioRegistration`(
  environment VARCHAR(45),
  username VARCHAR(15),
  scenario_name VARCHAR(45)) RETURNS int(11)

两个SELECT语句,后面跟着一个INSERT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RETURN scenario_id; // The inserted id

Java代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(getJdbcTemplate())
 .withFunctionName("ScenarioRegistration")
 .withoutProcedureColumnMetaDataAccess();

simpleJdbcCall.addDeclaredParameter(new SqlParameter("environment"
  ,Types.VARCHAR));

simpleJdbcCall.addDeclaredParameter(new SqlParameter("username" 
  ,Types.VARCHAR));

simpleJdbcCall.addDeclaredParameter(new SqlParameter("scenario_name"
  ,Types.VARCHAR));    

SqlParameterSource parameters = new MapSqlParameterSource()
  .addValue("environment", environment)
  .addValue("username", username)
  .addValue("scenario_name", scenario);

simpleJdbcCall.setReturnValueRequired(true);

Integer scenario_id =  simpleJdbcCall.executeFunction(
   Integer.class, parameters);    

我想要做的就是把新插入的场景的id还给我。我得到的是:SQL [{? = call scenarioregistration(?, ?)}]; Can't set IN parameter for return value of stored function call.

我发现有趣的是,它使用了我的三个输入值,并将它们更改为一个输出值和两个输入值。

有人教我这个问题以及如何解决这个问题吗?

谢谢,

史蒂文。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-28 22:57:28

关于你的答案,我会参考最新的医生在这里。Spring似乎试图推断输出,因为您没有明确指定输出。

根据上面的文档,有两种使用SimpleJdbcCall调用所需函数的有效方法

推断参数

因为您已经指定了withoutProcedureColumnMetaDataAccess,所以Spring将不会查看和查看输入/输出对您的函数是什么。如果您想要轻松,只需不要指定它,您应该能够:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SqlParameterSource parameters = new MapSqlParameterSource()
  .addValue("environment", environment)
  .addValue("username", username)
  .addValue("scenario_name", scenario);

Integer scenarioId = new SimpleJdbcCall(getJdbcTemplate())
    .withFunctionName("ScenarioRegistration")
    .executeFunction(Integer.class, parameters);

显式参数

如果您想让withoutProcedureColumnMetaDataAccess因任何原因关闭,您可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Integer scenarioId = new SimpleJdbcCall(getJdbcTemplate)
    .withFunctionName("ScenarioRegistration")
    .withoutProcedureColumnMetaDataAccess()
    .useInParameterNames("environment", "username", "scenario_name")
    .declareParameters(
        new SqlOutParameter("scenario_id", Types.NUMERIC),
        new SqlParameter("environment", Types.VARCHAR),
        new SqlParameter("username", Types.VARCHAR),
        new SqlParameter("scenario_name", Types.VARCHAR)            
    ).executeFunction(Integer.class, parameters);

注意:在本例中,order似乎是。应该首先声明output参数,然后再声明名为IN的参数。也就是说,参数?的顺序在[{? = call scenarioregistration(?, ?, ?)}]__中是序数)

NamedParameterJdbcTemplate 解决方案

调用函数的另一种方法是通过实际的JDBC调用。假设情况下,这可以避免使用SimpleJdbcCall的微调带来的痛苦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Integer scenarioId = namedParameterJdbcTemplate.queryForObject(
    "SELECT ScenarioRegistration(:environment, :username, :scenario_name)", 
    parameters, 
    Integer.class);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54414425

复制
相关文章
通过主机标头的 XSS
在 IE 中处理重定向时有一个有趣的错误,它可以将任意字符插入到 Host 标头中。假设您有以下 http 响应:
Khan安全团队
2022/01/11
1.6K0
通过 HTTP 标头的 XSS
在某些情况下,在应用程序的一个 HTTP 标头中传递的信息未正确清理,并在请求页面的某处或另一端输出,从而导致 XSS 情况。
Khan安全团队
2022/03/09
2.1K0
常见的HTTP标头介绍
在网络爬虫的实践过程中会遇到诸多挑战,被屏蔽是最令人头疼的一个。幸好,有许多技术可以帮助您免受IP屏蔽带来的影响,这其中,HTTP标头(HTTP Headers)的使用和优化是最有效的方法之一,但它往往也是最被大家低估的方法之一。
用户7850017
2022/05/07
1.1K0
常见的HTTP标头介绍
C++ 中的随机标头系列1
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
鲸落c
2022/11/28
1.4K0
C++ 中的随机标头系列1
设置和获取HTTP标头
%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:
用户7741497
2022/06/09
2.5K0
在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。
前端皮皮
2023/09/26
2060
在excel表格插入标黄的这列数据  实现合并单元格,并统计单元格个数?
Log4Shell HTTP 标头注入
此模块需要 Metasploit:https://metasploit.com/download
Khan安全团队
2022/01/14
1.1K0
「HTTP标头」都给你整理好了
HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍
Java3y
2020/02/19
5.8K0
「HTTP标头」都给你整理好了
使用结构化的标头字段改善HTTP
原文 / https://www.fastly.com/blog/improve-http-structured-headers
LiveVideoStack
2020/08/04
6660
服务器未能识别 HTTP 标头 SOAPAction 的值
SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。 SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目
张善友
2018/01/19
3.1K0
12.1版本中的全新数据交互控制和格式选项功能
Stephen Wolfram在他的博客中宣布了Mathematica 12.1版本的正式发行,提到了Dataset相关的更新,以便我们更便捷地研究、理解和演示你的数据。下面是如何使用更新后的Dataset,以及你可以如何利用这个函数更深入地了解你的数据的方法。
WolframChina
2020/08/25
1.6K0
12.1版本中的全新数据交互控制和格式选项功能
对 Google 说不 - 本站已启用屏蔽 FLoC 的 HTTP 标头
被广泛用于定向广告业务和用户数据收集的第三方 Cookie 即将迎来它的消失,而 Google 正试图设计一种方法让广告商在第三方 Cookie 消失后继续根据用户的浏览情况进行跟踪,即 FLoC。
Shiroka
2022/04/28
8740
解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
转自:http://www.cnsaturn.com/logs/2009/05/26/http-header-soapaction-value-cannot-recognized-by-server-errors 本文主要探讨跨平台调用Web Service出现:"服务器未能识别 HTTP 标头 SOAPAction 的值"的解决办法。
matinal
2020/11/27
5.4K0
解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
Kafka消费者接收数据异常,contentType标头始终附加到消息正文
使用Spring Cloud Stream 1.3.2.RELEASE向Kafka发布String消息。 当使用命令行Kafka使用者或Spring Kafka @KafkaListener使用消息时,contentType标头始终附加到消息正文
chenchenchen
2021/09/06
1.1K0
我又踩坑了!如何为HttpClient请求设置Content-Type标头?
平台显示 :签名校验失败, 排查到平台收到的Post Payload并非预期,阅读本文,解锁正确使用Content-Type标头的姿势。
有态度的马甲
2020/10/10
8.4K0
我又踩坑了!如何为HttpClient请求设置Content-Type标头?
YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用
虫无涯
2023/07/31
2180
openpyxl:Python的Excel操作库
luckpunk
2023/09/27
7380
openpyxl:Python的Excel操作库
测试:将手机摄像头用作网络摄像头的拍摄效果
根据我之前比较 WebRTC 和 Zoom 视频质量的文章,我可能需要升级我的网络摄像头。表现较好的网络摄像头价格在 80-200 美元之间。但是,我发现网络摄像头总是有点笨重,而且连线很长,除此之外,在我的笔记本电脑上找到一个免费的 USB 插头也非常麻烦,这使得我又不得不购买一个带电源的USB 集线器。
LiveVideoStack
2021/09/01
2.4K0
测试:将手机摄像头用作网络摄像头的拍摄效果
将Power Pivot模型数据取值到单元格中
在Excel中,使用Power Pivot搭建的模型通常用透视表展现结果,如下图所示。
wujunmin
2021/09/07
1.4K0
将Power Pivot模型数据取值到单元格中
java相关工具类(excel导出)
工具类 package com.longrise.SWMS.Util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.L
java攻城狮
2020/10/10
2.5K0

相似问题

将角度光滑的标头列合并为单个标头列

13

包含其他标头的单个标头

20

UINavigationBar上方的标头

12

粘贴列标头作为轴标

23

头上方的WPF数据标头

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文