当前位置: 首页 > news >正文

springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突

一、驱动与连接配置

  1. 更换JDBC驱动
    在pom.xml中移除MySQL驱动,添加达梦驱动(版本根据DM数据库选择):
<dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver</artifactId><version>8.1.2.141</version> <!-- 按实际版本调整 -->
</dependency>
  1. 修改数据源配置
#application.yml 中配置达梦连接(注意模式名大小写敏感):
spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://IP:PORT?schema=MD_TEST  # 显式指定模式username: your_userpassword: your_pwd

二、解决SQL语法兼容性问题

  1. 分页查询调整
    问题:MySQL的LIMIT语法在达梦中不兼容。
    方案:配置MyBatis-Plus使用达梦的分页方言
    在配置类中添加:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 指定达梦数据库类型interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.DM));return interceptor;
}
  1. 函数替换
    在这里插入图片描述

三、替换后启动的出错问题

  1. 在切换到达梦的驱动和数据连接后启动出错,无效的模式名[MD_TEST]
无效的模式名[MD_TEST]at dm.jdbc.driver.DBError.throwException(SourceFile:744)at dm.jdbc.a.a.y.r(SourceFile:623)at dm.jdbc.a.a.f.r(SourceFile:138)at dm.jdbc.a.a.y.z(SourceFile:555)at dm.jdbc.a.a.y.L(SourceFile:536)at dm.jdbc.a.a.a(SourceFile:267)at dm.jdbc.a.a.a(SourceFile:802)at dm.jdbc.driver.DmdbStatement.executeInner(SourceFile:771)

问题:找不到在达梦数据库中创建的模式(类型MySQL数据库)

#在 application.yml 中配置模式名,避免硬编码:
mybatis-plus:global-config:db-config:table-prefix: MD_TEST.  # 末尾的点不能少# 或指定schema(根据版本选择)schema: MD_TEST
  1. 自定义xml中的sql问题
### Error querying database.  Cause: dm.jdbc.driver.DMException:2,12[`]附近出现错误: 
语法分析出错
### The error may exist in file [D:\projectGit\system\target\classes\mybatis\system\MenuMapper.xml]
### The error may involve com.system.dao.MenuDao.listCurrentUserTopMenu
### The error occurred while executing a query
### SQL: select         sm.`menu_id`,sm.`name`         from sys_menu sm         inner join sys_role_menu srm on srm.menu_id = sm.menu_id         inner join sys_user_role sur on sur.role_id = srm.role_id and sur.user_id = ?      order by sm.order_num,sm.menu_id
### Cause: dm.jdbc.driver.DMException:2,12[`]附近出现错误: 
语法分析出错
; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException:2,12[`]附近出现错误: 
语法分析出错
org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: dm.jdbc.driver.DMException:2,12[`]附近出现错误: 
语法分析出错
### The error may exist in file [D:\projectGit\system\target\classes\mybatis\system\MenuMapper.xml]
### The error may involve com.system.dao.MenuDao.listCurrentUserTopMenu
### The error occurred while executing a query
### SQL: select         sm.`menu_id`,sm.`name`         from sys_menu sm         inner join sys_role_menu srm on srm.menu_id = sm.menu_id         inner join sys_user_role sur on sur.role_id = srm.role_id and sur.user_id = ?         where sm.parent_id = 155 and sm.type != 2         order by sm.order_num,sm.menu_id
### Cause: dm.jdbc.driver.DMException:2,12[`]附近出现错误: 语法分析出错
; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException:2,12[`]附近出现错误: 语法分析出错

错误原因分析
① 反引号(`)问题:

sm.`menu_id`, sm.`name`  -- 达梦不支持MySQL的反引号

达梦数据库不支持MySQL的反引号标识符,需要改为双引号或直接去掉,最好是直接取消反引号
② 模式名大小写问题
达梦对大小写敏感,如果迁移时表名/字段名保留了小写,查询时必须用双引号+小写引用。

  1. 模式取名名称出错
025-07-02 11:40:47.147 [http-nio-12001-exec-2] ERROR c.k.c.e.GlobalExceptionHandler - 【全局异常处理】Exception:
### Error querying database.  Cause: dm.jdbc.driver.DMException:3,11[-]附近出现错误: 
语法分析出错
### The error may exist in com/system/dao/UserDao.java (best guess)
### The error may involve com.system.dao.UserDao.selectOne
### The error occurred while executing a query
### SQL: SELECT   user_id,username,nickname,photo,mobile,status,client_type,user_type,join_id   FROM MD-TEST.sys_user   WHERE  del_flag=0  AND (user_id = ?)
### Cause: dm.jdbc.driver.DMException:3,11[-]附近出现错误: 
语法分析出错
; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException:3,11[-]附近出现错误: 
语法分析出错
org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: dm.jdbc.driver.DMException:3,11[-]附近出现错误: 
语法分析出错
### The error may exist in com/system/dao/UserDao.java (best guess)
### The error may involve com.system.dao.UserDao.selectOne
### The error occurred while executing a query
### SQL: SELECT   user_id,username,nickname,photo,mobile,status,client_type,user_type,join_id   FROM MD-TEST.sys_user   WHERE  del_flag=0  AND (user_id = ?)
### Cause: dm.jdbc.driver.DMException:3,11[-]附近出现错误: 
语法分析出错
; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException:3,11[-]附近出现错误: 

这个错误是由于达梦数据库对标识符(表名、模式名)的命名规则和引用方式与MySQL不同导致的。具体来说,问题出在模式名 MD-TEST 中的连字符 - 上。

1.模式名中的连字符问题:FROM MD-TEST.sys_user 达梦数据库将 MD-TEST 中的 - 解释为减号运算符,而不是模式名的一部分。

2.大小写敏感问题:达梦数据库默认标识符是大小写敏感的,如果创建时使用了小写或混合大小写,必须使用双引号包裹。

  1. 达梦数据库标识符命名规则

① 允许字符:字母(A-Z, a-z)、数字(0-9)、下划线(_)、中文(需要数据库支持中文字符集)

②禁止字符:连字符(-)、空格 、其他特殊字符(@, #, $ 等)

③大小写处理:不加引号的标识符会被转换为大写,包含小写字母或特殊字符的标识符必须用双引号包裹

  1. INFORMATION_SCHEMA 系统视图
## Error querying database.  Cause: dm.jdbc.driver.DMException:1 行附近出现错误:
无效的模式名[INFORMATION_SCHEMA]
### The error may exist in file [D:\projectGit\.system\target\classes\mybatis\share\DataBaseTableDao.xml]
### The error may involve com.share.dao.DataBaseTableDao.exitsTableCreateSql
### The error occurred while executing a query
### SQL: SELECT count(1) FROM information_schema.tables WHERE table_schema=? AND table_name = ?
### Cause: dm.jdbc.driver.DMException:1 行附近出现错误:
无效的模式名[INFORMATION_SCHEMA]
; uncategorized SQLException; SQL state [3F000]; error code [-2103];1 行附近出现错误:
无效的模式名[INFORMATION_SCHEMA]; nested exception is dm.jdbc.driver.DMException:1 行附近出现错误:
无效的模式名[INFORMATION_SCHEMA]
org.springframework.jdbc.UncategorizedSQLException: 
### Error querying database.  Cause: dm.jdbc.driver.DMException:1 行附近出现错误:
无效的模式名[INFORMATION_SCHEMA]

这个错误是因为达梦数据库没有 INFORMATION_SCHEMA 系统视图,这与 MySQL 不同。达梦使用自己的元数据查询方式。

① 达梦数据库的元数据查询:
达梦数据库不使用 INFORMATION_SCHEMA,而是有自己的系统表
达梦的元数据存储在 SYSTABLES、SYSOBJECTS 等系统表中

② 原MySQL查询

SELECT count(1) 
FROM information_schema.tables 
WHERE table_schema = ? AND table_name = ?

修改后:

    <select id="exitsTableCreateSql" resultType="int">SELECT COUNT(1) FROM ALL_TABLES WHERE OWNER = UPPER(#{dataBaseName}) AND TABLE_NAME = UPPER(#{tableName}) #使用 UPPER() 函数确保参数匹配</select>

如果还需要其他元数据查询,参考达梦官方文档《DM8系统管理员手册》中的"数据字典"章节

http://www.dtcms.com/a/265063.html

相关文章:

  • nohup java -jar 命令启动jar包,项目仍然会挂掉或者停止运行的解决方案
  • C++——手撕智能指针、单例模式、线程池、String
  • Vue + RuoYi 前后端分离入门手册
  • [深度学习环境踩坑记录]ubuntu22.04安装RTX3060驱动,黑屏、桌面只有壁纸和鼠标,一顿折腾
  • javaWeb02-Tomcat
  • java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘
  • YOLOv11剪枝与量化(一)模型压缩的必要性
  • Qt写入excel
  • 整流电路Multisim电路仿真实验汇总——硬件工程师笔记
  • Rust实现FasterR-CNN目标检测全流程
  • 教程:国内如何免费用Claude4+GPT4o生成高质量科研绘图
  • vue动态绑定样式
  • Kalibr解毒填坑(一):相机标定失败
  • 408第三季part1 - 操作系统 - 文件基本概念
  • 基于STM32的土豆种植自动化灌溉系统设计与实现
  • java依赖注入方法
  • 【C语言】知识总结·文件操作
  • Redis在项目中的使用
  • 在移动端使用 Tailwind CSS (uniapp)
  • 在项目架构时,如何选择打包构建工具?
  • Nginx、Spring Cloud Gateway 与 Higress 的应用场景及核心区别
  • Linux基本命令篇 —— alias命令
  • AI专业化应用加速落地,安全治理挑战同步凸显
  • 车载软件架构 -- SOA服务分层设计原则
  • 数学建模_非线性规划
  • 时钟(6.25-26)
  • pppoe宽带连接-系列命令调用
  • 使用Process Monitor定位benchstat工具执行过程
  • Almalinux_10.0下MySQL的多表操作与函数使用
  • 智慧城市的安全密码:商用密码如何守护万物互联?