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

达梦数据库适配遇到的一些问题

之前数据库国产化适配都是用的DM数据迁移工具做的,可以参考官方的迁移从 MySQL 移植到 DM,然后将迁移后的表和语句中程序运行时的报错解决了就可以了。
今天学习了一下达梦技术文档,手动创建了表空间,用户,数据库表,写入测试数据并用java进行连接进行了测试,发现了不少问题,记录一下。

一 springboot mybatis-plus 达梦依赖

mybatis-spring3.0 之后的版本才支持 DM 数据库

所以在引入mybatis-plus时要手动指定mybatis-spring的版本

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.14</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.5</version>
</dependency>
<dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.140</version>
</dependency>

二 达梦数据库连接指定模式

每个用户有一个默认的同名的模式,访问自己模式下的表、视图等,不需要加模式名,访问其他模式下的对象需要拥有访问权限,访问时还需加上模式名。

所以在数据库连接时指定模式就不用在每个sql和表上加上模式名称了,具体的url配置如下?schema=后面的就是模式名

spring:datasource:url: jdbc:dm://127.0.0.1:5236?schema=ZBXTusername: ZBXTpassword: Test@123456driver-class-name: dm.jdbc.driver.DmDriver

创建表空间,创建用户,指定模式语句(用SYSDBA执行)

CREATE TABLESPACE ZBXT DATAFILE 'zbxt.dbf' SIZE 128;
CREATE USER "ZBXT" IDENTIFIED BY "Test@123456" DEFAULT TABLESPACE "Test@123456";
GRANT DBA TO ZBXT;

三大小写问题和一些报错

如果你用达梦数据库自带的DM管理工具,你就会发现创建的表和字段全都是大写的,如果创建一些数据库保留关键字也是创建不起的,比如创建一个user表,DM管理工具的页面如图
在这里插入图片描述
如果你用官方推荐的SQLark百灵连接是可以创建成功的
在这里插入图片描述
我的建议是全部大写,小写的话后面会出现一些问题,我们接着看。
现在我们有两张表,一个ORG(全大写)一个user(全小写),属性都一样,id和name

我们创建两个java实体


@Data
@TableName("org")
public class Org {@TableId(type = IdType.ASSIGN_UUID)private String id;private String name;
}@Data
@TableName("\"user\"")
public class User {@TableId(type = IdType.ASSIGN_UUID)private String id;private String name;
}

对两个实体进行查询
ORG没问题,user会报错,一个是

dm.jdbc.driver.DMException: 第 1 行, 第 42 列[user]附近出现错误: 
语法分析出错

我们对user表添加一个"user"

继续报错

dm.jdbc.driver.DMException: 第1 行附近出现错误:
无效的列名[ID]

说user的ID无效,而且这里是大写的,我们给id也添加一个双引号"id",@TableField("\"ID\"")不管是大写还是小写的id都不行,我们把数据库的id改为大写试一下,其实DM管理工具改起来很方便,点击一下就自动变成大写了,而且用DM管理工具根本没法改成小写,这个就是在告诉们所有的名称都用大写。
在这里插入图片描述
数据库改成大写以后id字段就不报错了,而且java实体也不用指定@TableField了。
接下来就是name字段了,报错如下

dm.jdbc.driver.DMException: 第1 行附近出现错误:
无效的列名[NAME]

其实我们java定义的时候是小写,转换的时候全都是大写了,我们就把name的数据库也改成大写就可以了,或者在name字段上添加@TableField("\"name\"")
这时就不报错了

==>  Preparing: SELECT id,"name" FROM "user"
==> Parameters: 
<==      Total: 0

但是这样改的地方就很多,最方便的还是把数据库的name字段改为大写NAME,这样我们只需要把一些数据库保留关键字和方言语法改一下就可以了。

一个建议

为了保持一致,建议所有的数据库表名和字段都改成大写。

项目示例代码在绑定的资源中

参考文献

https://eco.dameng.com/document/dm/zh-cn/app-dev/java_Mybatis_frame.html

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

相关文章:

  • 电话交换机软件 3CX iOS 应用 V5.4 Beta 更新
  • 做高端企业网站建设公司北京精兴装饰公司
  • FONE为万帮数字能源打造全面预算管理系统
  • Lua VM 跳转指令设计:条件跳转、无条件跳转的底层逻辑
  • 等级保护标准体系再完善:六项新技术公安行标正式发布
  • 光储充微电网零碳园区解决方案:引领园区能源革命,赋能绿色低碳未来
  • 光储融合与智能监控:新型电力系统下的能源协同与运营创新
  • 新手学做免费网站软件泳衣服饰东莞网站建设
  • 舆情,情感微博系统demo,基于python+qt+nlp,开发语言python,界面库qt,无数据库版,数据来自第三方网站获取,
  • 财务----过账
  • 网站pc端网址和手机端网址建设网站建设worldpress
  • 电力电子技术 第九章——二极管整流器
  • 使用Docker部署ShowDoc接口文档工具
  • 交换机路由器基础(一)基础概念
  • 中国有哪些AI大模型公司
  • K8s 存储核心:一文读懂 PV 和 PVC 的设计逻辑与实践
  • p2p借贷网站开发微信公众号推文制作软件
  • k8s pod oom排查攻略
  • 成都市青羊区城乡建设局网站网页制作用什么软件
  • Unity使用AnimeGANv3实现动漫风格化效果(一)
  • (七)TRPO 算法 PPO 算法
  • RK3568前置知识
  • 逻辑回归正则化强度实验报告:不同 λ 值对模型系数与泛化能力的影响
  • LeetCode每日一题——反转链表
  • 南京市网站叫企业做的网站可不可以自己改主题
  • 怎么查询网站是谁做的seo查询工具网站
  • 【开源鸿蒙-AVCodec Kit】音视频编解码封装解封装部件介绍,转自开源鸿蒙官媒OpenAtom OpenHarmony
  • 【保姆级教程】MySQL 5.7 彻底卸载与重新安装全流程(附常见问题解决)
  • Debian 安装 Domain Admin
  • Java Maven+lombok+MySql+HikariCP 操作数据库