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

达梦数据库应用开发_JDBC接口介绍_yxy

达梦数据库应用开发_JDBC接口介绍

  • 1 JDBC是什么?
  • 2 JDBC主要类或接口介绍
    • 2.1 建立与 DM 数据库的连接
    • 2.2 转接发送 SQL 语句到数据库
    • 2.3 处理并返回语句执行结果
  • 3 JDBC基本使用
    • 3.1 前期准备
    • 3.2 增删改查代码示例
    • 3.3 绑定变量操作示例
    • 3.4 大字段操作示例

1 JDBC是什么?

JDBC 全称为 Java Database Connectivity,也就是 Java 数据库连接,是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口 (API) 。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。

JDBC 驱动程序的主要功能包括:

1.建立与 DM 数据库的连接。
2.转接发送 SQL 语句到数据库。
3.处理并返回语句执行结果。

2 JDBC主要类或接口介绍

2.1 建立与 DM 数据库的连接

java.sql.DriverManager:
用于管理驱动程序、并可与数据库建立连接。其类中的方法均为静态方法。
java.sql.Connection:
数据库连接类,作用是管理执行数据库的连接,可用于提交和回滚事务、创建Statement对象等操作

2.2 转接发送 SQL 语句到数据库

java.sql.Statement
运行简答sql语句,无需指定参数

java.sql.PreparedStatement
运行包含(或者不包含)IN类型参数的预编译SQL语句

java.sql.CallableStatement
运行存储过程


以上三种执行器,因为PreparedStatement包含已编译的sql,执行速度要快于Statement

2.3 处理并返回语句执行结果

java.sql.ResultSet
结果集对象,主要用于查询结果访问
执行SOL语句后数据库返回结果被JDBC处理成结果集对象

3 JDBC基本使用

四个核心基础参数,访问数据库的JAVA框架都需要

jdbc.driver=dm.jdbc.driver.DmDriver
jdbc.url=jdbc:dm://localhost:5236
idbc.username=test_yxy
jdbc.password=Test_yxy

3.1 前期准备

1.找到正确的数据库驱动
DM JDBC 驱动 jar 包在 DM 安装目录 /dmdbms/drivers/jdbc(/home/dmdba/dmdbms/drivers/jdbc)

驱动后缀跟JAVA版本对应,比如 DmJdbcDriver18.jar 对应 java 1.8

2.创建测试类进行测试
在这里插入图片描述

3.2 增删改查代码示例

package dm_01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TEST01 {
	// 定义 DM JDBC 驱动串
	static String jdbcString = "dm.jdbc.driver.DmDriver";
	// 定义 DM URL 连接串
	static String urlString = "jdbc:dm://localhost:5236";
	// 定义连接用户名
	static String userName = "SYSDBA";
	// 定义连接用户口令
	static String password = "SYSDBA";
	// 定义连接对象
	static Connection conn = null;
	// 定义 SQL 语句执行对象
	static Statement state = null;
	// 定义结果集对象
	static ResultSet rs = null;
	
	
	public static void main(String[] args) {
	    try {
	//--------------------------前提条件---------------------------------------------------   	
	    	
	        //1.加载 JDBC 驱动程序
	        System.out.println("Loading JDBC Driver...");
	        Class.forName(jdbcString);
	        
	        //2.连接 DM 数据库
	        System.out.println("Connecting to DM Server...");
	        conn = DriverManager.getConnection(urlString, userName, password);
	        
	        //3.通过连接对象创建 java.sql.Statement 对象
	        state = conn.createStatement();
	        
	        
	//---------------------------进行增删改查操作--------------------------------------------------
	        //增加
	            String sql_insert = "insert into SYSDBA.TEST01 " + 
	        "(ID,DATE)values('1','2024-01-01 00:00:00'),('2','2025-01-01 00:00:00'),('3','2026-01-01 00:00:00')";

	            //执行添加的 SQL 语句
	            state.execute(sql_insert);
	            
	        //删除
	            String sql_delete = "delete from SYSDBA.TEST01 "+"where ID = '3'";
	            //执行删除的 SQL 语句
	            state.execute(sql_delete);
	            
	        //修改
	            String sql_update = "update SYSDBA.TEST01 set "+"ID = '11' where ID = '1'";
	            state.executeUpdate(sql_update);
	            
	        //查询
	            //定义查询 SQL
	            String sql_selectAll = "select * from SYSDBA.TEST01";
	            //执行查询的 SQL 语句
	            rs = state.executeQuery(sql_selectAll);
	            displayResultSet(rs);

	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	            try {
	                //关闭资源
	                rs.close();
	                state.close();
	                conn.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	    //显示结果集
	    public static void displayResultSet(ResultSet rs) throws SQLException{
	        while (rs.next()) {
	            int i=1;
	            Object id = rs.getObject(i++);
	            Object name = rs.getObject(i++);
	            System.out.println(id+"  "+name);
	        }
	    }
}

打印出结果为:

Loading JDBC Driver...
Connecting to DM Server...
11  2024-01-01 00:00:00
2  2025-01-01 00:00:00

3.3 绑定变量操作示例

package dm_01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbc_prepareStatement {

	    // 定义 DM JDBC 驱动串
		static String jdbcString = "dm.jdbc.driver.DmDriver";
		// 定义 DM URL 连接串
		static String urlString = "jdbc:dm://localhost:5236";
		// 定义连接用户名
		static String userName = "SYSDBA";
		// 定义连接用户口令
		static String password = "SYSDBA";
		// 定义连接对象
	    static Connection conn = null;
	    // 定义 SQL 语句执行对象
	    static PreparedStatement pstate = null;
	    
	    public static void main(String[] args) {
	        try {
	        	
	            //1.加载 JDBC 驱动程序
	            System.out.println("Loading JDBC Driver...");
	            Class.forName(jdbcString);
	            //2.连接 DM 数据库
	            System.out.println("Connecting to DM Server...");
	            conn = DriverManager.getConnection(urlString, userName, password);
	            //绑定操作
	            String sql_updateNameById = "update SYSDBA.TEST01 set "+"ID = ? where ID = ?";
	            //3.通过连接对象和修改语句的模板,创建 java.sql.PreparedStatement 对象
	            pstate = conn.prepareStatement(sql_updateNameById);
	            //4.绑定?对应的参数:理论上有多少个?就要绑定多少个值;
	            pstate.setString(1, "1");
	            pstate.setString(2, "11");
	            //5. 执行 SQL 语句
	            pstate.executeUpdate();
	            

	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	            try {
	                pstate.close();
	                conn.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	
}

打印结果为

Connecting to DM Server...
1  2024-01-01 00:00:00
2  2025-01-01 00:00:00

3.4 大字段操作示例

1.初始化表

CREATE TABLE TEST03
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"PHOTO" IMAGE,
"DESCRIBE" BLOB,
"TXT" CLOB,
NOT CLUSTER PRIMARY KEY("ID"));

2.代码示例

package dm_01;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class jdbc_operate_bigData {
	    // 定义 DM JDBC 驱动串
	    static String jdbcString = "dm.jdbc.driver.DmDriver";
		// 定义 DM URL 连接串
		static String urlString = "jdbc:dm://localhost:5236";
		// 定义连接用户名
		static String userName = "SYSDBA";
		// 定义连接用户口令
		static String password = "SYSDBA";
        // 定义连接对象
        static Connection conn = null;
        // 定义 SQL 语句执行对象
        static PreparedStatement pstate = null;

//查询大字段
        // 定义保存结果集的对象
        static ResultSet rs = null;
        // 定义输入流对象
        static InputStream in3 = null;
        // 定义输出流对象
        static FileOutputStream fos = null;
        // 定义输出流对象
        static FileOutputStream fos2 = null;
        // 定义高效字符流对象
        static BufferedReader reader1 = null;
        
        
        public static void main(String[] args) {
            try {
                //1.加载 JDBC 驱动程序
                System.out.println("Loading JDBC Driver...");
                Class.forName(jdbcString);
                //2.连接 DM 数据库
                System.out.println("Connecting to DM Server...");
                conn = DriverManager.getConnection(urlString, userName, password);
                
//------------------------------插入大字段------------------------------------------------------------------------------------------
                //1.插入大字段信息:  
                String sql_insert = "INSERT INTO TEST03 (\"PHOTO\","
                    + "\"DESCRIBE\",\"TXT\")VALUES(?,?,?);";
                pstate = conn.prepareStatement(sql_insert);
                
                //加载图片为输入流
                String filePath = "D:\\DM\\java20250217\\photo_test.jpg";
                File file = new File(filePath);
                String filePath2 = "D:\\DM\\java20250217\\clob_test.txt";
                File file2 = new File(filePath2);
                
                InputStream in = new BufferedInputStream(new FileInputStream(file));
                InputStream in2 = new BufferedInputStream(new FileInputStream(file));
                BufferedReader reader = new BufferedReader(
                new InputStreamReader(new FileInputStream(file2),"UTF-8"));
                
                //1.绑定 stream 流信息到第一个?
                pstate.setBinaryStream(1, in);
                //2.绑定 Inputstream 对象到第二个?这里
                pstate.setBlob(2, in2);
                //3.绑定 Reader 对象到第三个?
                pstate.setClob(3, reader);
                pstate.executeUpdate();
                
//-------------------------------查询大字段-----------------------------------------------------------------------------------------
                //1.查询大字段信息 SQL 语句
                String sql_select = "SELECT * FROM TEST03 where ID='1';";
                pstate = conn.prepareStatement(sql_select);
                //2.创建 ResultSet 对象保存查询结果集
                rs  = pstate.executeQuery();
                //3.解析结果集
                while(rs.next()) {
                    //获取第一列 id 信息
                    int id = rs.getInt("ID");
                    
                    //获取第二列 photo 图片信息,并把该图片直接写入到 D:\\DM\\java20250217\\id_photo_test.jpg;
                    in3 = rs.getBinaryStream("PHOTO");
                    fos = new FileOutputStream("D:\\DM\\java20250217\\"+id+"_photo_test.jpg");
                    int num = 0;
                    //每次从输入流中读取一个字节数据,如果没读到最后指针向下继续循环
                    while((num=in3.read())!=-1) {
                        //将每次读取的字节数据,写入到输出流中
                        fos.write(num);
                    }
                    
                    //获取第三列的 Blob 大字段信息
                    //Blob 对象处理的是字节型大字段信息例如图片、视频文件等
                    Blob blob = rs.getBlob("DESCRIBE");
                    in3 = blob.getBinaryStream();
                    fos2 = new FileOutputStream("D:\\DM\\java20250217\\"+id+"_Blob_photo_test.jpg");
                    //每次从输入流中读取一个字节数据,如果没读到最后指针向下继续循环
                    while((num=in3.read())!=-1) {
                        //将每次读取的字节数据,写入到输出流中
                        fos2.write(num);
                    }
                    
                    //获取第四列的 Clob 大字段信息
                    //Clob 大字段处理的是字符型大字段信息,文本等数据
                    Clob clob = rs.getClob("txt");
                    reader1 = new BufferedReader(clob.getCharacterStream());
                    String str = null;
                    while((str=reader1.readLine())!=null) {
                        //将每次读取的字节数据
                        System.out.println(str.toString());
                    }
                }

                
                
                
                
//-----------------------------------------------------------------------------------------------------------------------
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            	 try {
                     //关闭资源
                     fos.close();
                     in3.close();
                     rs.close();
                     pstate.close();
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
            }
        }
}

3.打印结果为
TXT中的内容

Loading JDBC Driver...
Connecting to DM Server...
clob_test.txt文本

//1.插入大字段信息:  
    package java_jdbc;
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;..........

文件夹中的内存
在这里插入图片描述

下一篇
达梦数据库应用开发_Hibernate框架介绍_yxy


更多其他数据库相关专栏:

1.数据库优化
数据库优化基本思路、索引详解、执行计划、统计信息、CBO原理、单表优化、多表优化、分布式优化、子查询等
数据库优化(sql优化)专栏连接

2.达梦分布式数据库:
部署详细步骤(DEM)、备份还原实战、核心特性理解、使用心得、表分区方式详细介绍、表分区最佳实践、DPC架构详解等
达梦分布式DPC专栏连接

相关文章:

  • 一周学会Flask3 Python Web开发-request请求钩子(Hook)
  • Day7 25/2/20 THU
  • Hadoop初体验
  • 黑客如何利用提示词工程操纵AI代理?
  • 接口测试-API测试中常用的协议(下)
  • Nginx 部署 Vue 指南
  • 热门的AI网页版网址大全
  • 毕业项目推荐:基于yolov8/yolo11的100种中药材检测识别系统(python+卷积神经网络)
  • 飞机沿设置路径飞行以及跟踪飞行物(十一)
  • 【技术追踪】DiffDGSS:基于扩散模型的确定性表示进行泛化性视网膜图像分割(MICCAI-2024)
  • 实现网站内容快速被搜索引擎收录的方法
  • Rust 未来会成为主流的编程语言吗?
  • 掌握 ElasticSearch 四种match查询的原理与应用
  • Android Http-server 本地 web 服务
  • rust学习六、简单的struct结构
  • Linux-ubuntu系统移植之Uboot启动流程
  • 前端CSS面试题及参考答案
  • 计算机网络安全之一:网络安全概述
  • 新站如何快速获得搜索引擎收录?
  • 如何把deepseek接入python?
  • 杨荫凯已任浙江省委常委、组织部部长
  • 珠海市香洲区原区长刘齐英落马,此前已被终止省人大代表资格
  • 【社论】以“法治之盾”护航每一份创新
  • 山西10岁男孩遭生母和继父殴打遇害,案件庭审延期
  • 无视规范开“远端”、企业云端被窃密,国安部:莫让运维成运“危”
  • 朝中社发表评论文章,谴责美军部署B1-B轰炸机至日本