我使用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+Redis+Lua分布式限流的实现 2023-04-07
- Flowable 设置任务处理人的四种方式详解 2023-06-10
- Spring Boot MQTT Too many publishes in progress错误的解决方案 2023-02-11
- Java Swing实现画板的简单操作 2022-12-16
- JVM GC 垃圾收集梳理总结 2023-02-20
- 揭开Java内存管理的面纱 2023-09-01
- java – 使用带有MemSql的JPA本机查询选择json列 2023-11-03
- 使用JPA自定义VO接收返回结果集(unwrap) 2023-08-10
- Log4j如何屏蔽某个类的日志打印 2023-08-10
- JavaSwing实现小型学生管理系统 2022-11-01