达梦数据库应用开发_JDBC接口介绍_yxy
- 开源代码
- 2025-08-25 02:09:01

达梦数据库应用开发_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专栏连接
达梦数据库应用开发_JDBC接口介绍_yxy由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“达梦数据库应用开发_JDBC接口介绍_yxy”