我使用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文件中执行过程的问题
- springboot连接sqllite遇到的坑及解决 2023-01-13
- MyBatis-Plus实现公共字段自动填充功能详解 2023-03-22
- Java实战之网上书店管理系统的实现 2022-12-08
- java – 执行查询后修改MongoDB结果集 2023-11-03
- SpringMVC拦截器快速掌握上篇 2023-04-18
- Go Java算法之比较版本号方法详解 2023-04-07
- Java中ReentrantLock和ReentrantReadWriteLock的原理 2023-05-14
- Java详解ScriptEngine接口动态执行JS脚本 2023-04-06
- java性能优化之分代回收 2023-02-20
- 详解Spring mvc ant path的使用方法 2023-08-01