当前使用版本(必须填写清楚,否则不予处理)

3.30

该问题是怎么引起的?(最新版上已修复的会直接close掉)

连接达梦数据库调用mapper中的insert方法

重现步骤

连接达梦数据库调用mapper中的insert方法

报错信息

org.springframework.jdbc.BadSqlGrammarException:

Error updating database. Cause: dm.jdbc.driver.DMException: 第 31 行, 第 28 列[]附近出现错误:

语法分析出错

The error may exist in com/ddkj/manager/dao/system/UserMapper.java (best guess)

The error may involve com.ddkj.manager.dao.system.UserMapper.insert

The error occurred while executing an update

SQL: INSERT INTO sys_user ( username, password, nick_name, sex, create_time, is_del ) VALUES ( ?, ?, ?, ?, ?, ? )

Cause: dm.jdbc.driver.DMException: 第 31 行, 第 28 列[]附近出现错误:

语法分析出错 ; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException: 第 31 行, 第 28 列[]附近出现错误: 语法分析出错

at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
at com.sun.proxy.$Proxy97.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:60)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96)
at com.sun.proxy.$Proxy98.insert(Unknown Source)
at com.ddkj.EasywebShiroApplicationTests.contextLoads(EasywebShiroApplicationTests.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Caused by: dm.jdbc.driver.DMException: 第 31 行, 第 28 列[]附近出现错误: 语法分析出错 at dm.jdbc.driver.DBError.throwException(Unknown Source) at dm.jdbc.c.b.n.R(Unknown Source) at dm.jdbc.c.b.n.O(Unknown Source) at dm.jdbc.c.b.n.N(Unknown Source) at dm.jdbc.c.a.a(Unknown Source) at dm.jdbc.c.a.a(Unknown Source) at dm.jdbc.driver.DmdbPreparedStatement.prepareSql(Unknown Source) at dm.jdbc.driver.DmdbPreparedStatement.(Unknown Source) at dm.jdbc.driver.DmdbConnection.do_prepareStatement(Unknown Source) at dm.jdbc.driver.DmdbConnection.do_prepareStatement(Unknown Source) at dm.jdbc.driver.DmdbConnection.do_prepareStatement(Unknown Source) at dm.jdbc.driver.DmdbConnection.prepareStatement(Unknown Source) at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:486) at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:83) at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88) at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.intercept(PaginationInterceptor.java:162) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy113.prepare(Unknown Source) at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:92) at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:53) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426) ... 36 more

Comment From: miemieYaho

主键没有自增问题,自己排查

Comment From: 645288337

主键自增了。我将mp执行的 INSERT INTO sys_user ( username, password, nick_name, sex, create_time, is_del ) VALUES ( ?, ?, ?, ?, ?, ? ) 语句复制下来自己写mapper.xml文件是可以插入的 `package com.ddkj.manager.model.system;

import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableId; import com.ddkj.common.base.BaseEntity;

import java.util.Date; import java.util.List;

/* *

* 用户表 *

* * @author wangfan * @since 2019-02-11 / @TableName("sys_user") public class User extends BaseEntity {

private static final long serialVersionUID = 1L;

/**
 * 用户id
 */
@TableId(value = "user_id", type = IdType.AUTO)
private Integer userId;

/**
 * 账号
 */
private String username;

/**
 * 密码
 */
private String password;

/**
 * 昵称
 */
private String nickName;

/**
 * 头像
 */
private String avatar;

/**
 * 性别
 */
private String sex;

/**
 * 手机号
 */
private String phone;

/**
 * 邮箱
 */
private String email;

/**
 * 邮箱是否验证,0未验证,1已验证
 */
private Integer emailVerified;

/**
 * 真实姓名
 */
private String trueName;

/**
 * 身份证号
 */
private String idCard;

/**
 * 出生日期
 */
private Date birthday;

/**
 * 部门id
 */
private Integer departmentId;

/**
 * 状态,0正常,1冻结
 */
private Integer state;



@TableField(exist = false)
private List<Role> roles;  // 用户的角色列表

public Integer getUserId() {
    return userId;
}

public void setUserId(Integer userId) {
    this.userId = userId;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getNickName() {
    return nickName;
}

public void setNickName(String nickName) {
    this.nickName = nickName;
}

public String getAvatar() {
    return avatar;
}

public void setAvatar(String avatar) {
    this.avatar = avatar;
}

public String getSex() {
    return sex;
}

public void setSex(String sex) {
    this.sex = sex;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public Integer getEmailVerified() {
    return emailVerified;
}

public void setEmailVerified(Integer emailVerified) {
    this.emailVerified = emailVerified;
}

public String getTrueName() {
    return trueName;
}

public void setTrueName(String trueName) {
    this.trueName = trueName;
}

public String getIdCard() {
    return idCard;
}

public void setIdCard(String idCard) {
    this.idCard = idCard;
}

public Date getBirthday() {
    return birthday;
}

public void setBirthday(Date birthday) {
    this.birthday = birthday;
}

public Integer getDepartmentId() {
    return departmentId;
}

public void setDepartmentId(Integer departmentId) {
    this.departmentId = departmentId;
}

public Integer getState() {
    return state;
}

public void setState(Integer state) {
    this.state = state;
}



public List<Role> getRoles() {
    return roles;
}

public void setRoles(List<Role> roles) {
    this.roles = roles;
}

@Override
public String toString() {
    return "User{" +
            ", userId=" + userId +
            ", username=" + username +
            ", password=" + password +
            ", nickName=" + nickName +
            ", avatar=" + avatar +
            ", sex=" + sex +
            ", phone=" + phone +
            ", email=" + email +
            ", emailVerified=" + emailVerified +
            ", trueName=" + trueName +
            ", idCard=" + idCard +
            ", birthday=" + birthday +
            ", departmentId=" + departmentId +
            ", state=" + state +
            ", createTime=" + createTime +
            ", updateTime=" + updateTime +
            "}";
}

} ` 这是我实体类

Comment From: qmdx

@645288337 检测确保数据库表的自增设置打开了,建议使用 mp 生成的唯一主键插入性能上也会更快

Comment From: miemieYaho

那可能驱动不支持主键回写