达梦数据库应用开发_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专栏连接