我使用schema.sql文件在我的Spring启动应用程序中创建/删除表,它工作正常.但是当我添加更改表的过程时:DELIMITER $$CREATE PROCEDURE Alter_Table()BEGINIF NOT EXISTS( SELECT NULLFROM INFORMATION_SCHEMA.COL...
我使用schema.sql文件在我的Spring启动应用程序中创建/删除表,它工作正常.
但是当我添加更改表的过程时:
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'test_table'
AND table_schema = 'test'
AND column_name = 'cc_test_id') THEN
alter table test_table add cc_test_id VARCHAR(128) NOT NULL;
END IF;
END $$
call Alter_Table;
我收到了com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常.
但是,在MySQL工作台中执行此过程会成功完成.
那么,如果有人知道这个问题的原因是什么,请告诉我.
谢谢.
解决方法:
这是我发现的解决方案,它运行得很好,但它不是理想的,因为你必须更改你的SQL脚本.
在application.properties文件中更改DataSource分隔符属性:
spring.datasource.separator=^;
然后更新schema.sql文件,如下所示:
CREATE PROCEDURE Alter_Table()
BEGIN
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'test_table'
AND table_schema = 'test'
AND column_name = 'cc_test_id') THEN
alter table test_table add cc_test_id VARCHAR(128) NOT NULL;
END IF;
END ^;
call Alter_Table ^;
DELIMITER命令仅适用于MySQL CLI客户端和Workbench,不适用于Spring Boot数据库初始化.一旦删除了DELIMITER命令,Spring Boot仍然会抛出异常,因为它不会理解;存储过程中的字符不是单独的语句,因此您必须更改数据源分隔符属性作为变通方法.
本文标题为:java – 在spring boot schema.sql文件中执行过程的问题
基础教程推荐
- Java中ArrayBlockingQueue和LinkedBlockingQueue 2023-05-08
- SpringMVC拦截器快速掌握上篇 2023-04-17
- Mybatis-Plus实现SQL拦截器的示例 2023-07-14
- JavaWeb 之Ubuntu intelliJ 新建maven项目及配置tomcat 2023-09-01
- Java使用POI导出Excel(一):单sheet 2023-06-05
- 关于Java中finalize析构方法的作用详解 2023-07-15
- SpringBoot集成mybatis连接oracle的图文教程 2022-11-08
- Spring Cloud Gateway动态路由Apollo实现详解 2023-06-30
- 关于maven使用过程中无法导入依赖的一些总结 2023-04-16
- MyBatis集成Spring流程详解 2023-04-16
