spring boot 中调用存储过程失败问题

本文记录了在Spring Boot应用中使用jdbcTemplate和MyBatis调用存储过程遇到的问题及解决方法。当调用存储过程时,分别遇到了SQL解析异常和SQLFeatureNotSupportedException。最终通过创建MySQL事件来定时执行存储过程,成功实现了数据的生成和显示。若需与程序交互,可通过中间表格处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下问题的解决过程:症状描述:

使用jdbcTemplate.execute调用mysql的存储过程,报错:

io.shardingsphere.core.parsing.parser.exception.SQLParsingUnsupportedException: Not supported token 'IDENTIFIER'.

修改为使用mybatis调用存储过程,同样报错:

java.sql.SQLFeatureNotSupportedException: prepareCall

实在没办法了。找了好几天资料也没有解决。最后看到mysql里面有个“事件”,反正我的这个存储过程是需要定时执行的一个存储过程,这个东西能不能用的上?

编写事件的生成sql,在查询分析器里面执行:

CREATE EVENT IF NOT EXISTS event_totaltaskofdept
ON SCHEDULE EVERY 1 HOUR
ON COMPLETION PRESERVE
COMMENT 'XXXXXXXXXX完成情况统计'
DO call totaltaskofdept();

好了,数据成功生成。页面显示就可以了。

如果需要跟程序交互的,可以使用中间表格来处理数据。

Spring Boot中,我们可以利用`ResponseEntity`、`StreamingResponseBody`以及`Resource`或`File`对象来提供文件下载服务。下面是一个基本的示例,假设你有一个文件存储在一个资源目录下,文件名是`file.txt`: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.util.UriComponentsBuilder; import org.springframework.core.io.Resource; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @GetMapping("/download") public ResponseEntity<StreamingResponseBody> downloadFile( @RequestParam("filename") String filename, MultipartFile file) throws IOException { if (!file.isEmpty()) { // 检查上传的文件是否为空 Resource resource = classpathResource(filename); // 获取文件资源 Path filePath = Paths.get(resource.getFile().getAbsolutePath()); try (InputStream inputStream = Files.newInputStream(filePath)) { return ResponseEntity.ok() .header("Content-Disposition", "attachment; filename=" + filename) .contentType(MediaType.parseMediaType(resource.getContentType())) .body(() -> inputStream); } } throw new IllegalArgumentException("No file uploaded or invalid filename provided"); } private Resource classpathResource(String fileName) { ClassPathResource cpResource = new ClassPathResource(fileName); return cpResource.exists() ? cpResource : null; } ``` 在这个例子中,`@GetMapping("/download")`处理GET请求,`@RequestParam("filename")`用于获取从URL查询字符串传入的文件名,`MultipartFile file`用于接收HTTP请求中的文件上传。 当用户访问`/download?filename=file.txt`,并且上传了一个名为`file.txt`的文件,Spring Boot会返回一个包含文件内容的响应,设置头信息以便浏览器识别为下载操作。如果没有上传文件或文件名无效,将会抛出异常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光正好2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值