我有一个Spring Boot 应用程序,我试图在应用程序启动时初始化一些数据。
这是我的应用程序属性:
# Database connection
spring.datasource.url=jdbc:h2:mem:test_db
spring.datasource.username=...
spring.datasource.password=...
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.initialize=true
spring.datasource.schema=schema.sql
spring.datasource.data=schema.sql
# Hibernate configuration
# spring.jpa.hibernate.ddl-auto = none
这是schema.sql:
CREATE TABLE IF NOT EXISTS `Person` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL,
`age` INTEGER NOT NULL,
PRIMARY KEY(`id`)
);
和data.sql
INSERT INTO `Person` (
`id`,
`first_name`,
`age`
) VALUES (
1,
'John',
20
);
但在应用程序启动时出现“SQL语句中的语法错误”:
19:08:45.642 6474 [main] INFO o.h.tool.hbm2ddl.SchemaExport - HHH000476: Executing import script '/import.sql'
19:08:45.643 6475 [main] ERROR o.h.tool.hbm2ddl.SchemaExport - HHH000388: Unsuccessful: CREATE TABLE Person (
19:08:45.643 6475 [main] ERROR o.h.tool.hbm2ddl.SchemaExport - Syntax error in SQL statement "CREATE TABLE PERSON ( [*]"; expected "identifier"
Syntax error in SQL statement "CREATE TABLE PERSON ( [*]"; expected "identifier"; SQL statement:
我不明白,这个SQL有什么问题。
7条答案
按热度按时间p8h8hvxi1#
请尝试以下代码。删除
PRIMARY KEY(
id)
并执行它。6tr1vspr2#
这个错误是由
CREATE TABLE
宣告的结构所造成。当您在SQL宣告的结尾有多馀的逗号--逗号后面没有数据行宣告时,就会产生这个结果。例如:
这是因为
CREATE TABLE
需要与表沿着创建的列的列表,并且列的第一个参数是identifier
。当您检查here时,列声明遵循以下结构:因此,在您的例子中,正如@budthapa和@Vishwanath Mataphati所提到的,您可以简单地从
CREATE TABLE
声明中删除PRIMARY KEY(id)
行。此外,您已经在列定义的第一行中声明了id
是主键。如果没有语句作为PRIMARY KEY声明,请确保检查最后一个列声明后是否有多余的逗号。
rkue9o1l3#
请尝试此操作,因为您已经使用了**
Table_name
**7gyucuyw4#
在我的例子中,从插入查询的表名中删除单引号是有帮助的
我不得不改变这一点:
更改为:
b5buobof5#
您设置了自动递增ID,因此无法插入具有该ID的新记录。
u91tlkcl6#
我遇到了同样的问题。我用这些
application.properties
修复了这个问题:多行和默认编码存在一些问题。
gt0wga4j7#
我在下面添加到application.properties,它对我很有效
jpa.属性.休眠.全局引用标识符= true