You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot连接MySQL遇CommandAcceptanceException报错求助

问题:SpringBoot连接MySQL时出现CommandAcceptanceException错误

尝试将MySQL数据库连接到Java SpringBoot项目,出现org.hibernate.tool.schema.spi.CommandAcceptanceException错误,修改spring.jpa.hibernate.ddl-auto=update(实际未变更配置)后问题仍未解决。

错误详情

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table to_do (id integer not null, desc varchar(255), done bit not null, target_date date, username varchar(255), primary key (id)) engine=InnoDB" via JDBC [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc varchar(255), done bit not null, target_date date, username varchar(255), p' at line 1]

配置文件

spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp logging.level.org.springframework=info logging.level.com.pao.springboot.myFirstWebApp=debug

spring.jpa.defer-datasource-initialization=true

spring.datasource.url=jdbc:mysql://localhost:3306/todos spring.datasource.username=todos-user spring.datasource.password=dummytodos spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

spring.jpa.hibernate.ddl-auto=update

spring.jpa.show-sql=true

依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    <!--<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>-->

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    </dependency>

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>glassfish-jstl</artifactId>
    </dependency>

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>5.1.3</version>
    </dependency>

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap-datepicker</artifactId>
        <version>1.9.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>3.6.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

实体类

package com.pao.springboot.myFirstWebApp.toDo;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

import java.time.LocalDate;

//Database
// List of todos

@Entity(name = "ToDo")
public class toDo {

    @Id
    @GeneratedValue
    private int id;
    private String username;
    private String desc;
    private LocalDate targetDate;
    private boolean done;
    
    
    public toDo(){}
    
    public toDo(int id, String username, String desc, LocalDate targetDate, boolean done) {
        this.id = id;
        this.username = username;
        this.desc = desc;
        this.targetDate = targetDate;
        this.done = done;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    public String getDesc() {
        return desc;
    }
    
    public void setDesc(String desc) {
        this.desc = desc;
    }
    
    public LocalDate getTargetDate() {
        return targetDate;
    }
    
    public void setTargetDate(LocalDate targetDate) {
        this.targetDate = targetDate;
    }
    
    public boolean isDone() {
        return done;
    }
    
    public void setDone(boolean done) {
        this.done = done;
    }
    
    @Override
    public String toString() {
        return "toDo{" +
                "id=" + id +
                ", user='" + username + '\'' +
                ", desc='" + desc + '\'' +
                ", targetDate=" + targetDate +
                ", done=" + done +
                '}';
    }

}

解决方案

  • 核心原因:实体类中的desc字段是MySQL的保留关键字,直接作为列名会触发SQL语法错误。
  • 解决方法二选一:
    1. 修改字段名,避免使用关键字:
      将实体类中的desc改为description,同步更新对应的getter/setter方法:
      private String description;
      
      public String getDescription() {
          return description;
      }
      
      public void setDescription(String description) {
          this.description = description;
      }
      
    2. 保留原字段名,通过注解转义关键字:
      在desc字段上添加@Column注解,用反引号包裹列名:
      import jakarta.persistence.Column;
      
      // ...其他代码
      
      @Column(name = "`desc`")
      private String desc;
      
  • 额外建议:确认MySQL版本与驱动版本兼容,当前使用的mysql-connector-java 8.0.13适配MySQL 8.x版本,若版本不匹配可能引发其他异常。

内容的提问来源于stack exchange,提问作者Pao Beltran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:35:41