注册
达梦数据库接口:JDBC、ODBC 与 dmPython(Python)
培训园地/ 文章详情 /

达梦数据库接口:JDBC、ODBC 与 dmPython(Python)

hahaha 2026/08/19 317 0 0

达梦数据库接口:JDBC、ODBC 与 Python(dmPython)

引言

达梦数据库(DM8)作为一款成熟的关系型数据库,为开发者提供了多种应用程序接口(API),支持 Java、C/C++、Python、Go 等多种编程语言的接入。在实际开发中,最常用的三种连接方式分别是:
• JDBC:Java 应用程序连接达梦的标准接口
• ODBC:C/C++ 等语言通过通用标准访问达梦
• dmPython:Python 应用程序通过达梦原生 DPI 接口访问
本文将基于实际配置经验,完整记录这三种连接方式的配置步骤、测试代码和踩坑总结。

一、环境准备

在开始之前,先确认基础环境:
项目 配置
操作系统 麒麟 V10(Kylin Linux Advanced Server V10)
数据库 达梦 DM8,安装路径 /opt/dmdbms
数据库端口 5236
测试用户 SYSDBA / Dameng123
Java 版本 OpenJDK 1.8
Python 版本 Python 3.7
注意:如果你的达梦安装路径不同(如 /home/dmdba/dmdbms),请相应替换本文中的所有路径。

二、JDBC 连接配置

JDBC(Java Database Connectivity)是 Java 应用程序与数据库的接口规范,旨在为 Java 程序员提供标准的数据库应用程序编程接口。达梦提供了完全遵循 JDBC 标准的 Type 4 纯 Java 驱动程序。

2.1 获取 JDBC 驱动

达梦 JDBC 驱动位于数据库安装目录的 /drivers/jdbc 下:
ls -l /opt/dmdbms/drivers/jdbc/
达梦的 JDBC 驱动目前有多个版本,分别对应不同的 JDK 版本:
驱动包 适用 JDK 版本
DmJdbcDriver16.jar JDK 1.6
DmJdbcDriver17.jar JDK 1.7
DmJdbcDriver18.jar JDK 1.8 及以上
根据你的 Java 版本选择对应的 JAR 包,并将其添加到项目的 Classpath 中。

2.2 确认 Java 环境

检查 Java 版本:
java -version
如果只有 JRE 而没有 JDK(javac 命令不存在),需要安装 JDK 开发包:
sudo yum install -y java-1.8.0-openjdk-devel
麒麟 V10 服务器版基于 RPM 包管理系统,完全支持 yum 命令。

2.3 编写 JDBC 测试程序

创建测试文件 JDBCDemo.java:
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) {
// 定义 DM JDBC 驱动类名
String driverName = "dm.jdbc.driver.DmDriver";
// 定义 DM URL 连接串,格式:jdbc:dm://<host>:<port>
String url = "jdbc:dm://192.168.17.11:5236";
String username = "SYSDBA";
String password = "Dameng123";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载驱动类
Class.forName(driverName);
// 2. 建立连接
conn = DriverManager.getConnection(url, username, password);
System.out.println("✅ 达梦数据库连接成功!");
// 3. 执行查询
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT 'Hello DM8' AS MSG FROM DUAL");
if (rs.next()) {
System.out.println("查询结果: " + rs.getString("MSG"));
}
} catch (ClassNotFoundException e) {
System.out.println("❌ 驱动类未找到:" + e.getMessage());
} catch (SQLException e) {
System.out.println("❌ 连接失败:" + e.getMessage());
} finally {
// 4. 关闭资源
try { if (rs != null) rs.close(); } catch (SQLException e) {}
try { if (stmt != null) stmt.close(); } catch (SQLException e) {}
try { if (conn != null) conn.close(); } catch (SQLException e) {}
}
}
}

2.4 编译与运行

编译(指定驱动包路径)
javac -cp /opt/dmdbms/drivers/jdbc/DmJdbcDriver18.jar JDBCDemo.java
运行
java -cp .:/opt/dmdbms/drivers/jdbc/DmJdbcDriver18.jar JDBCDemo
成功输出:
✅ 达梦数据库连接成功!
查询结果: Hello DM8

2.5 JDBC URL 格式说明

JDBC URL 的标准格式为:
jdbc:dm://<host>:<port>
也可以携带额外参数:
jdbc:dm://localhost:5236?schema=SYSDBA
如果需要连接达梦主备集群,还可以使用服务名方式:
jdbc:dm://dmsvc?dmsvc=(192.168.0.1:5236,192.168.0.2:5236)

2.6 常见问题排查

问题 解决方案
ClassNotFoundException: dm.jdbc.driver.DmDriver 检查 -cp 参数中的驱动 JAR 路径是否正确
javac: 未找到命令 安装 JDK 开发包:yum install java-1.8.0-openjdk-devel
驱动版本不兼容 使用与数据库版本相近的 JDBC 驱动


三、ODBC 连接配置

ODBC(Open Database Connectivity)是微软主导的数据库访问标准,提供了一个抽象接口,允许应用程序使用相同的代码访问不同的数据库。它通常用于 C/C++、.NET、Python、PHP 等语言。

3.1 安装 unixODBC

在 Linux 环境下,需要先安装 ODBC 驱动管理器:
sudo yum install -y unixODBC unixODBC-devel

3.2 配置 ODBC 驱动(/etc/odbcinst.ini)

odbcinst.ini 用于注册 ODBC 驱动:
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /opt/dmdbms/bin/libdodbc.so
达梦 ODBC 驱动文件位于数据库安装目录的 /drivers/odbc 下,实际使用时可能需要指向 /bin/libdodbc.so。

3.3 配置数据源(/etc/odbc.ini)

odbc.ini 用于创建系统 DSN(数据源名称):
[DM8_DSN]
Description = DM8 Database
Driver = DM8 ODBC DRIVER
Server = 192.168.17.11
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5236
注意:odbc.ini 中的 Driver 值必须与 odbcinst.ini 中的驱动名称完全一致。

3.4 设置环境变量

编辑 ~/.bash_profile:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dmdbms/bin
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
生效:
source ~/.bash_profile

3.5 验证 ODBC 配置

查看 ODBC 配置文件位置:
odbc_config --odbcini
odbc_config --odbcinstini

3.6 测试 ODBC 连接

isql -v DM8_DSN SYSDBA Dameng123
成功输出:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
输入 quit 退出。

3.7 常见问题排查

问题 解决方案
找不到驱动 检查 odbcinst.ini 中 Driver 路径是否正确
isql: command not found 安装 unixODBC:yum install unixODBC
连接失败 检查数据库服务状态、网络连通性和端口是否开放


四、Python(dmPython)连接配置

dmPython 是达梦提供的依据 Python DB API version 2.0 标准开发的数据库访问接口。与 JDBC 和 ODBC 不同,dmPython 并不通过 ODBC 或 JDBC 等标准接口,而是直接调用达梦底层的 DM DPI 接口完成 Python 模块扩展。

4.1 理解 dmPython 的架构

dmPython 在整个接口体系中的位置如下:
• 最上层:你的 Python 应用程序代码
• 中间层:dmPython——对上层提供 Python DB API 2.0 标准接口
• 最底层:DM DPI——dmPython 直接调用 DM DPI 接口与数据库内核通信
这意味着 dmPython 不依赖 ODBC 驱动,但直接依赖 DPI 动态库。这也是必须设置 LD_LIBRARY_PATH 环境变量的根本原因。

4.2 安装 dmPython

方式一:在线安装
如果服务器能联网:
pip install dmPython
方式二:源码编译安装(推荐)
达梦的 dmPython 驱动源码位于安装目录的 /drivers/python/dmPython 下:
进入 dmPython 源码目录
cd /opt/dmdbms/drivers/python/dmPython
编译安装
python3 setup.py install
注意:Linux 下编译可能需要安装 gcc 和 python3-devel。

4.3 设置环境变量

dmPython 通过调用 DM DPI 接口完成功能扩展,需要 DPI 的运行环境。设置环境变量:
export DM_HOME=/opt/dmdbms
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
建议将上述配置永久添加到 ~/.bashrc 中。

4.4 验证安装

进入 Python 交互环境:
python3

import dmPython
print(dmPython.file) # 查看模块路径
如果 import 没有报错,说明安装成功。
注意:不同版本的 dmPython 可能没有定义 version 属性,不要因此而误判安装失败。

4.5 编写测试代码

创建 connect_test.py:
import dmPython
def test_connection():
conn = None
cursor = None
try:
# 建立连接
conn = dmPython.connect(
user='SYSDBA',
password='Dameng123',
server='192.168.17.11', # 注意参数名是 server,不是 host
port=5236,
autoCommit=True # DML 操作是否自动提交
)
print("✅ 达梦数据库连接成功!")
# 执行查询
cursor = conn.cursor()
cursor.execute("SELECT 'Hello DM8' AS MSG FROM DUAL")
row = cursor.fetchone()
print(f"查询结果: {row[0]}")
except dmPython.Error as e:
print(f"❌ 数据库错误: {e}")
finally:
if cursor:
cursor.close()
if conn:
conn.close()
if name == "main":
test_connection()
运行:
python3 connect_test.py
成功输出:
✅ 达梦数据库连接成功!
查询结果: Hello DM8

4.6 dmPython.connect() 常用参数

dmPython.connect() 支持丰富的连接参数:
参数 说明 默认值
user 登录用户名 SYSDBA
password 登录密码(必填) 无
server / host 主机地址(IP、localhost 或服务名) localhost
port 端口号 5236
autoCommit DML 操作是否自动提交 True
login_timeout 登录超时时间(毫秒) 5000
connection_timeout 执行超时时间(秒) 0(不限制)
local_code 客户端字符编码方式 系统默认

4.7 常见问题排查

问题 解决方案
ImportError: libdmdpi.so 找不到 设置 LD_LIBRARY_PATH 包含 /opt/dmdbms/bin
ModuleNotFoundError: No module named 'dmPython' 确认已正确安装 dmPython
编译时找不到 DM 软件 设置 DM_HOME 环境变量
中文乱码 在 connect() 中指定 local_code 或 encoding 参数


五、三种连接方式对比

对比维度 JDBC ODBC dmPython
适用语言 Java C/C++、.NET、PHP 等 Python
底层依赖 纯 Java(Type 4 驱动) unixODBC + libdodbc.so DM DPI 动态库
是否走标准接口 是(JDBC 标准) 是(ODBC 标准) 否(直接调 DPI)
驱动位置 /drivers/jdbc/.jar /drivers/odbc/.so /drivers/python/dmPython/
配置文件 无需配置文件 odbc.ini + odbcinst.ini 无需配置文件
环境变量 CLASSPATH ODBCINI、LD_LIBRARY_PATH DM_HOME、LD_LIBRARY_PATH
核心洞察
三种连接方式的本质相同,都是”语言标准 API + 数据库厂商驱动 + 业务代码”。但它们在底层实现上有显著差异:
• JDBC 是纯 Java 实现,通过 Socket 直连数据库,不依赖任何 C 库
• ODBC 通过 ODBC 驱动管理器调用达梦的 ODBC 驱动(libdodbc.so)
• dmPython 直接调用达梦的 DPI 接口(libdmdpi.so),路径最短
这也是为什么 dmPython 必须设置 LD_LIBRARY_PATH——它需要找到 DPI 动态库才能运行。

六、踩坑经验总结

6.1 驱动路径务必准确

达梦安装目录可能是 /opt/dmdbms、/home/dmdba/dmdbms 或 /dm8,务必用 ls 确认实际路径后再配置。

6.2 JDK 与 JRE 的区别

仅有 JRE 无法编译 Java 程序,需要安装 java-1.8.0-openjdk-devel。

6.3 麒麟 V10 的包管理

• 服务器版使用 yum/dnf
• 桌面版可能使用 apt
• 根据系统版本选择合适的命令

6.4 环境变量的重要性

无论使用哪种连接方式,环境变量都是最容易出错的环节:
• JDBC:确保 JAR 包在 Classpath 中
• ODBC:确保 ODBCINI 和 LD_LIBRARY_PATH 正确
• dmPython:确保 DM_HOME 和 LD_LIBRARY_PATH 正确

6.5 版本兼容性

使用 JDBC 驱动时,需要使用和服务器端 DM 数据库相近的版本,相隔时间太久的版本可能出现部分功能无法适配的情况。


七、验证结果汇总

连接方式 状态 验证命令
JDBC ✅ java -cp .:/opt/dmdbms/drivers/jdbc/DmJdbcDriver18.jar JDBCDemo
ODBC ✅ isql -v DM8_DSN SYSDBA Dameng123
dmPython ✅ python3 dmPython_demo.py


至此,已经初步掌握了达梦数据库的三种主流连接方式。无论是 Java 企业级开发、C/C++ 系统编程,还是 Python 数据分析与快速开发,都能游刃有余地接入达梦数据库。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服