最新的解决错误的解法:
我的达梦数据库一值包大小错误问题,其实最根本的原因还是当初创建数据库的时候,没有把那个忽视大小写的配置打开,导致我的sql语句必须要带上双引号才能正确的访问,不然就会被自动转换成大写,然后就会报无效的列名等,之前的那些都是不治本的策略,最好的解决是在创建数据库的时候,把下列操作取消勾选

———————————————————————————————————————————
[Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: ### Error querying database. Cause: dm.jdbc.driver.DMException: 第3 行附近出现错误: 无效的表或视图名[t_user] ### The error may exist in com/example/springboot/mapper/UserMapper.java (best guess) ### The error may involve com.example.springboot.mapper.UserMapper.selectOne ### The error occurred while executing a query ### SQL: SELECT id,username,password,nick_name,age,sex,role FROM "t_user" WHERE (username = ? AND password = ?) ### Cause: dm.jdbc.driver.DMException: 第3 行附近出现错误: 无效的表或视图名[t_user] ; 第3 行附近出现错误:
这是第一个报错,包无效表名,错误的原因是因为,我配置文件数据库的连接是:
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/springboot_vue
username: SYSDBA
password: ********
hikari:
# 连接池最小空闲连接数
minimum-idle: 5
# 连接池最大连接数
maximum-pool-size: 20
# 空闲连接存活时间(毫秒)
idle-timeout: 300000
# 连接池名字(可选)
pool-name: HikariCP
# 从连接池获取连接的超时时间(毫秒)
connection-timeout: 60000
# 检测连接是否有效的 SQL(达梦要用 FROM DUAL)
connection-test-query: SELECT 1 FROM DUAL
但是我的模式的结构是
这里因为使用的是SYSDBA用户连接的,所以他会默认去SYSDBA下查找表,但我SYSDBA本身没有表,所以找不到,就报了这个错误,解决的办法就是,在和数据库映射的对象中添加:
//数据库表名
@TableName("\"springboot_vue\".\"t_user\"")
@Data
public class User
注意:如果你的数据库建的表名是小写的(或者建表时,表名是用双引号的),则格式必须是"\"springboot-vue\".\"t_user\"" ,因为如果不加上双引号,在查询数据库的时候,会自动变成大写,同样也会找不到表,提示无效的表或视图名。
但是上面这种方法太麻烦且繁琐了,最根本的解决方案是,直接连接在配置文件配置
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
# 推荐用 ?schema=... 参数(注意大写或小写均可,但以你驱动文档为准)
url: jdbc:dm://127.0.0.1:5236?schema=springboot_vue
username: SYSDBA
password: ************
hikari:
connection-init-sql: SET SCHEMA springboot_vue
connection-test-query: SELECT 1 FROM DUAL
minimum-idle: 5
maximum-pool-size: 20
第二个错误是无效的列名:
2025-08-12 11:53:31.077 ERROR 27064 --- [nio-9090-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException:
### Error querying database. Cause: dm.jdbc.driver.DMException: 第3 行附近出现错误:
无效的列名[USERNAME]
### The error may exist in com/example/springboot/mapper/UserMapper.java (best guess)
### The error may involve com.example.springboot.mapper.UserMapper.selectOne
### The error occurred while executing a query
### SQL: SELECT "id",username,"password","nick_name","age","sex","role" FROM "springboot-vue"."t_user" WHERE (username = ? AND "password" = ?)
### Cause: dm.jdbc.driver.DMException: 第3 行附近出现错误:
无效的列名[USERNAME]
; 第3 行附近出现错误:
无效的列名[USERNAME]; nested exception is dm.jdbc.driver.DMException: 第3 行附近出现错误:
无效的列名[USERNAME]] with root cause
错误的原因还是因为没有加双引号,达梦数据库会自动大写去查找,不同的点就是@TableId设置了自增长的话,就无需再用@TableField,只需要在@TableId设置别名即可
//数据库表名
@TableName("\"springboot-vue\".\"t_user\"")
@Data
public class User
{
// 设置ID自增长
@TableId(value = "\"id\"",type = IdType.AUTO)
private Integer id;
@TableField("\"username\"")
private String username;
@TableField("\"password\"")
private String password;
@TableField("\"nick_name\"")
private String nickName;
@TableField("\"age\"")
private Integer age;
@TableField("\"sex\"")
private String sex;
@TableField("\"role\"")
private Integer role;
//告诉mybaties bookList是不存在的
@TableField(exist = false)
private List<Book> bookList;
}
1万+

被折叠的 条评论
为什么被折叠?



