基于达梦数据库开发-Java篇

news2024/11/18 6:32:18

文章目录

  • 前言
  • 一、示例展示
    • 1.环境准备
    • 2.采用基础的jdbc调用
    • 3.采用扩展的mybatis调用
  • 二、注意事项
    • 1.使用路径注解
    • 2.数据库对象的准确引用
  • 三、可能异常
    • 1.无效的表或视图名
    • 2.无效的表或视图名
    • 3.网络通信异常
  • 总结


前言

达梦提供了JDBC方式的驱动以便进行Java开发。默认情况下相关Jar包可在部署的数据库安装目录 /dmdbms/drivers/jdbc中获取,一般情况下 在JDK8环境下采用DmJdbcDriver18.jar 进行相关的达梦数据库开发。本文讲述基于IDEA开发工具,使用SpringBoot框架进行简单的达梦开发示例,并讨论可能遇到的问题。


一、示例展示

1.环境准备

  1. 搭建一个达梦数据库,并建立相关账户及数据库对象(本例建立用户TESTDM,并在该用户下建立表TEST_BLOCK_T)
  2. 在安装目录 /dmdbms/drivers/jdbc中复制文件DmJdbcDriver18.jar到本地
  3. 在IDEA中搭建SpringBoot工程并引入文件DmJdbcDriver18.jar(本例工程中建立lib文件夹,并在文件夹中引入文件DmJdbcDriver18.jar)

2.采用基础的jdbc调用

使用jdbc方式调用达梦数据库的核心操作包含以下几步:

  • 在pom文件配置相关jar包信息,其中达梦包引用本地路径
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.dm</groupId>
            <artifactId>Dm8JdbcDriver</artifactId>
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemPath>
        </dependency>
  • 配置application.properties
spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
spring.datasource.url=jdbc:dm://10.1.29.113:5236
spring.datasource.username=TESTDM
spring.datasource.password=123456
  • 添加控制类文件DbController.java
@RestController
public class DbController {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/queryDbVersion")
    public List queryDbVersion() {
        System.out.println("test ok111");
        return jdbcTemplate.queryForList(
                "SELECT block_id,block_name  FROM TEST_BLOCK_T");
    }
}

运行后正常情况下在浏览器输入 http://localhost:8080/queryDbVersion 会展示如下结果
在这里插入图片描述

3.采用扩展的mybatis调用

使用扩展的mybatis方式调用达梦数据库的核心操作包含以下几步:

  • 在pom文件配置相关jar包信息,其中达梦包引用本地路径
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.dm</groupId>
            <artifactId>Dm8JdbcDriver</artifactId>
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemPath>
        </dependency>
  • 配置application.properties(与jdbc调用的配置方式相同)
  • 添加实体类文件Block.java
@TableName(value = "TEST_BLOCK_T")
public class Block {
    private static final long serialVersionUID = 1L;

    @TableId
    private String blockId;

    private String blockName;

    public String getBlockId() {
        return blockId;
    }

    public void setBlockId(String blockId) {
        this.blockId = blockId;
    }

    public String getBlockName() {
        return blockName;
    }

    public void setBlockName(String blockName) {
        this.blockName = blockName;
    }

}
  • 添加映射接口文件BlockMapper.java
@Mapper
public interface BlockMapper extends BaseMapper<Block> {
}
  • 添加控制类文件BlockController.java
@RestController
@RequestMapping("/hello")
public class BlockController {
    @Autowired
    private BlockMapper blockMapper;


    @GetMapping("/list")
    @ResponseBody
    public List index() {

        //直接调用BaseMapper封装好的CRUD方法,就可实现无条件查询数据
        List<Block> list = blockMapper.selectList(null);

        //循环获取用户数据
        for (Block block:list){
            //获取用户名称
            System.out.println(block.getBlockName());
        }
        return list;
  

运行后正常情况下在浏览器输入 http://localhost:8080/queryDbVersion 会展示与jdbc调用相同的结果

二、注意事项

1.使用路径注解

示例讲述的工程是以标准路径方式建立的,其文件结构如下所示
在这里插入图片描述
有时候因特殊情况,我们建立的工程可能并不是规范的路径,例如工程路径如下所示

在这里插入图片描述

这时候需要在相关的启动文件中添加@ComponentScan与@MapperScan注解信息,类似如下所示

@SpringBootApplication
@MapperScan("com.mapper")
@ComponentScan("com.controller")
public class demo  {

    public static void main(String[] args) {
         SpringApplication.run(demo.class, args);
    }

}

2.数据库对象的准确引用

在之前调用示例中我们使用账户TESTDM登录时对象TEST_BLOCK_T只在模式TESTDM中存在,如果该对象在多个模式下存在,则需要做相应处理,以下为两种处理方式:

  • 调整application.properties
spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
spring.datasource.url=jdbc:dm://10.1.29.113:5236/TESTDM
spring.datasource.username=TESTDM
spring.datasource.password=123456

在spring.datasource.url中明确指出调用的模式

  • 增加对象的模式节点引用
    修改实体类文件Block.java注解为
@TableName(value = "TESTDM.TEST_BLOCK_T")

三、可能异常

1.无效的表或视图名

在运行工程中如果出现如下类似错误

2024-04-16 15:27:43.466 ERROR 1120 --- [nio-8080-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: 第1 行附近出现错误:
无效的表或视图名[TEST_BLOCK_T]

可能数据库账号默认模式中没有相关表,需要准确引用

2.无效的表或视图名

2024-04-17 14:20:00.878 ERROR 25116 --- [nio-8080-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.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is dm.jdbc.driver.DMException: 用户名或密码错误

可能数据库账号或密码的不对,有可能为大小写不一致导致

3.网络通信异常

2024-04-17 14:22:25.803 ERROR 41240 --- [nio-8080-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.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is dm.jdbc.driver.DMException: 网络通信异常

可能spring.datasource.url配置的IP无法访问,也可能相关的端口无法访问

总结

本文简述了两种使用Java连接数据库的工作方式,并阐述了一些需要注意的细节以及一些可能出现的异常情况。相关完整代码请见JAVA-SpringBoot-达梦-IDEA-连接访问示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1621243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3个比较不错的Linux云音乐应用程序整理

在现代音乐流媒体时代&#xff0c;基于云的音乐应用程序因其便利性和可访问性而变得非常流行。Linux 用户尤其寻求可靠且功能丰富的音乐播放器来无缝地享受他们喜爱的音乐。 在这里&#xff0c;我们探讨了三个最好的基于云的音乐应用程序&#xff0c;每个应用程序都提供专为 L…

函数的查询

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在实际使用中经常会需要查询数据库中已有的函数或者某一个函数的内容&#xff0c;下面就介绍一下如何查询函数。 和存储过程类似&#xff0c;这也需要使用到数据字典user_s…

污水处理设备运维注意事项有哪些

污水处理设备的运维是确保污水处理效率和处理质量的关键环节。良好的运维不仅可以延长设备的使用寿命&#xff0c;还能确保污水处理过程的稳定性和可靠性。以下是一些污水处理设备运维的重要注意事项&#xff1a; 1. 定期检查和维护 设备检查&#xff1a;定期对污水处理设备进…

ctfshow web入门 web180--web185

web180 import requests import recom re.compile("admin") def repisTrue(char):url f"http://自己环境的网址/api/?id1%27and%27{char}%27%27{char}&page1&limit10"res requests.get(url)w com.search(res.text)if w is not None:return T…

【第6节】Lagent AgentLego 智能体应用搭建

目录 1 基础课程2 安装环境2.1 教程要求2.2 安装 Lagent 和 AgentLego 3 实践操作3.1 Lagent&#xff1a;轻量级智能体框架3.1.1 Lagent Web Demo 使用3.1.2 用 Lagent 自定义工具 3.2 AgentLego&#xff1a;组装智能体“乐高”3.2.1 AgentLego 直接使用部分3.2.2 AgentLego We…

关于csgo pubg等游戏卡死问题,原因是英伟达显卡的问题

在正常使用过程中&#xff0c;常常出现&#xff0c;卡死&#xff0c;卡屏问题&#xff0c;经过调查是英伟达驱动的问题&#xff0c;在30系40系明显 显卡超频 本来30系40系就存在不稳定的问题&#xff0c;超频更加导致了此问题&#xff0c;会在驱动中卡死&#xff0c;就是掉驱…

233 基于matlab的多通道非负矩阵分解(MNMF)算法

基于matlab的多通道非负矩阵分解&#xff08;MNMF&#xff09;算法。其能够寻找到一个非负矩阵W和一个非负矩阵H&#xff0c;满足条件VW*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。使用EM准则对混合信号进行分解。程序已调通&#xff0c;可直接运行。 233 多通道非…

Linux 的情况下实现贪吃蛇 -- 第二十八天

1. 打印地图 keypad(stdsrc,1) 参数表示是否接收&#xff0c;1表示接收指令 2.思路&#xff1a;初始化initNcurses()&#xff0c; 封装地图函数实现地图gamePic&#xff08;&#xff09; 分三部分实现&#xff1a;2.1: 在第0行&#xff1a;打印 "--",&quo…

六、e2studio VS STM32CubeIDE之代码自动补全

目录 一、概述/目的 二、eclipse c/c自动补全 2.1 修改实现原理 2.2 修改插件cdt.ui的方法 2.2.1 资料来源 2.2.2 修改的主要流程或逻辑 2.2.3 失败的原因 三、呼吁st和Renesas厂家支持自动补全代码 六、e2studio VS STM32CubeIDE之代码自动补全 一、概述/目的 eclipse…

使用Perf诊断PostgreSQL性能问题

1 编译参数 使用perf获取完整的堆栈信息需要下面几个编译参数&#xff1a; -O0&#xff1a;编译器不做优化-ggdb3&#xff1a;增加了为GDB优化的调试信息&#xff0c;级别是3-g3&#xff1a;增加了调试信息&#xff0c;级别是3-fno-omit-frame-pointer&#xff1a;保留完成的…

《生成式AI导论》学习笔记

1.课程定位 2.什么是生成式人工智慧&#xff1f; 3. 今日的生成式人工智慧厉害在哪里&#xff1f; 4.训练不了人工智慧&#xff1f;那我训练自己 5.训练不了人工智慧&#xff1f;你可以训练你自己&#xff08;中&#xff09;——拆解问题使用工具 6.大语言模型修炼史——第一阶…

【电控仿真分析笔记】

命令滤波器分析 前馈系数0.9 转速反馈延迟为一阶低通滤波器500 ki/kp的PI控制器 速度环命令滤波 增加前馈延迟的命令滤波 加入命令滤波器 iq&#xff1a;

后台图书管理系统:SSM整合开发案例

代码已经完善,文章内容会在后续补充 代码地址(https://javazhang.lanzn.com/ig8tf1wd2aba 密码:1234) 1.1 .SpringConfig 代码 Configuration ComponentScan({"com.itheima.service" }) PropertySource("classpath:jdbc.properties") Import({JdbcConfig…

在mac上安装node.js及使用npm,yarn相关命令教程

1、安装node.js 官网&#xff1a;Node.js — Download Node.js 选择需要的版本&#xff0c;点击DownLoad 2、点击继续&#xff0c;直到安装成功。 2.1打开终端输入命令node -v 显示版本号则说明已安装成功 3、全局安装yarn命令 1、sudo npm install --global yarn &#xf…

C++笔记:类和对象(一)->封装

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量&#xff0c;类型就像是定义了数据的规则&#xff0c;而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型&#xff0c;而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

精度论文Generative Prompt Model for Weakly Supervised Object Localization

Generative Prompt Model for Weakly Supervised Object Localization 中国科学院大学&&浙江大学CVPR20231.Abstract 当从图像类别标签中学习对象定位模型时,弱监督对象定位(WSOL)仍然具有挑战性, 传统的鉴别训练激活模型的方法忽略了具有代表性但鉴别性较差的对象…

【深度学习】DDoS-Detection-Challenge aitrans2024 入侵检测,基于机器学习(深度学习)判断网络入侵

当了次教练&#xff0c;做了个比赛的Stage1&#xff0c;https://github.com/AItransCompetition/DDoS-Detection-Challenge&#xff0c;得了100分。 一些记录&#xff1a; 1、提交的flowid不能重复&#xff0c;提交的是非入侵的数量和数据flowid,看check.cpp可知。 2、Stage…

字符串型漏洞注入

SQL注入是一种严重的安全漏洞&#xff0c;它允许攻击者在不受控制的情况下执行任意的SQL代码。这种攻击通常发生在Web应用程序没有正确验证或转义用户输入的情况下。字符串型注入是SQL注入的一种形式&#xff0c;它涉及到在应用程序的输入框中插入恶意的字符串&#xff0c;以干…

Linux套接字编程详解

Linux套接字编程 预备知识IP地址和MAC地址套接字结构网络字节序 UDP套接字编程服务端代码客服端代码 TCP 套接字守护进程 计算器模块1 日志头文件序列化和反序列化 预备知识 IP地址和MAC地址 MAC地址用来在局域网中标识唯一主机 Ip地址用于在广域网中标识唯一主机 &#xff0…

c++的学习之路:26、AVL树

摘要 本章主要是说一下AVL树的实现&#xff0c;这里说的是插入的底层原理 目录 摘要 一、原理 二、四种旋转 1、左单旋 2、右单旋 3、左右双旋 4、右左双旋 三、代码实现 1、节点创建 2、插入 3、旋转 4、判断是否平衡 5、测试 四、代码 一、原理 前面说了搜索…