Spring Boot Error通过JDBC语句执行DDL

问题描述

因此,我想制作一个简单的CRUD应用程序,并且将MysqL Workbench用于数据库。 我在MysqL Workbench中的连接

Hostname : 127.0.0.1
Port : 3306

我不在MysqL Workbench中使用密码。

现在我的应用程序属性如下所示:

spring.datasource.url=jdbc:MysqL://localhost:3306/employee_management_system?useSSL=false
spring.datasource.username=root
spring.datasource.password=

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MysqLInnoDBDialect

spring.jpa.hibernate.ddl-auto=update

我得到的错误

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table employees (id bigint not null auto_increment,email_id varchar(255),first_name varchar(255),last_name varchar(255),primary key (id)) type=InnoDB" via JDBC Statement

和另一个底部

Caused by: java.sql.sqlSyntaxErrorException: You have an error in your sql Syntax; check the manual that corresponds to your MariaDB server version for the right Syntax to use near 'type=InnoDB' at line 1

请有人帮忙吗?

解决方法

我认为您的数据库不支持InnoDB引擎。 尝试更换

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect

作者

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
,

改为使用此查询:

create table employees 
  ( 
     id         bigint not null auto_increment,email_id   varchar(255),first_name varchar(255),last_name  varchar(255),primary key (id) 
  ) 
engine=InnoDB; 

以供参考:Using "TYPE = InnoDB" in MySQL throws exception

,

就我而言,我需要通过将这两行添加到我的 application.properties 文件中来检查它生成的 sql

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true 

然后我才能够复制 sql,将其粘贴到控制台编辑器中,并获得更详细的错误描述。在那里它抱怨我试图用保留字命名我的桌子。我改变了它,它起作用了(我使用的是 postgres)。

,

问题是您现在尝试访问不存在的数据库或默认的“information_schema”,该用户不允许在其上创建表,所以很简单

创建一个新的数据库:

create database example;

创建一个新用户来处理这个数据库,或者你可以使用 root 访问,但新用户最好不要在任何地方都使用 root 用户

create user 'exampleuser'@'%' identified by 'PASSWORD;

然后分配用户对该数据库的所有权限

grant all on example.* to 'exampleuser'@'%';

最后,确保你更新了你的 spring 配置

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/example
spring.datasource.username=exampleuser
spring.datasource.password=12345