本文将基于 Kylin Linux Advanced Server V10 环境,手把手配置 JDBC 和 ODBC 连接达梦数据库实例,包含完整的操作步骤、常见问题解决,以及两种连接方式的本质区别。
/home/dmdba/dmdbms/data/dmdata/DAMENG//data/dmdata/DAMENG02/JDBC(Java Database Connectivity)是 Java 程序连接数据库的标准接口,达梦通过提供对应的 JDBC 驱动实现连接。
进入达梦驱动的 JDBC 目录:
ls /home/dmdba/dmdbms/drivers/jdbc/
输出:
DmJdbcDriver6.jar DmJdbcDriver7.jar DmJdbcDriver8.jar DmJdbcDriver11.jar ...
根据 JDK 版本选择:JDK 8 应使用 DmJdbcDriver8.jar。设置环境变量方便后续操作:
export DM_JDBC_DRIVER=/home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar
创建测试目录并编写 DmJdbcTest.java:
import java.sql.*;
public class DmJdbcTest {
public static void main(String[] args) {
String url = "jdbc:dm://10.36.41.13:5236";
String user = "SYSDBA";
String password = "Wei050210"; // 根据实际环境修改
try {
Class.forName("dm.jdbc.driver.DmDriver");
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello DM8!' FROM DUAL");
if (rs.next()) {
System.out.println("查询结果: " + rs.getString(1));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
javac -cp $DM_JDBC_DRIVER DmJdbcTest.java
java -cp .:$DM_JDBC_DRIVER DmJdbcTest
预期输出:
连接成功!
查询结果: Hello DM8!
至此,JDBC 连接配置完成。若出现 ClassNotFoundException,请检查驱动 jar 路径是否正确;网络不通则先 ping 或 telnet 对应 IP 和端口。
ODBC(Open Database Connectivity)是更通用的数据库连接标准,允许 C/C++、Python 等各类语言通过统一接口访问数据库。在 Linux 上需要借助 unixODBC 驱动管理器。
麒麟 V10 服务器无外网,需离线安装。下载对应 RPM 包并上传至 /opt:
unixODBC-2.3.7-1.el8.x86_64.rpm unixODBC-devel-2.3.7-1.el8.x86_64.rpm
尝试直接安装时会报依赖错误:libreadline.so.7()(64bit) is needed。系统已安装的是 readline-8.0,库文件为 libreadline.so.8。创建软链接并不能骗过 RPM 依赖检查,最便捷的方式是忽略依赖强制安装:
rpm -ivh --nodeps unixODBC-*.rpm
验证安装:
odbcinst --version
说明:
libreadline.so.7缺失仅影响isql的命令行编辑功能(如历史命令翻页),ODBC 核心功能完全不受影响。
编辑 /etc/odbcinst.ini,注册达梦 ODBC 驱动:
[DM8 ODBC DRIVER]
Description = DM ODBC Driver for DM8
Driver = /home/dmdba/dmdbms/bin/libdodbc.so
Threading = 1
libdodbc.so 即达梦的 ODBC 驱动库,位于 $DM_HOME/bin 下。
编辑 /etc/odbc.ini,定义连接到具体实例的数据源:
[DM5236]
Description = DM8 Instance GRP1_RT_01
Driver = DM8 ODBC DRIVER
Server = 10.36.41.13:5236
UID = SYSDBA
PWD = Wei050210
Database = GRP1_RT_01
LoginMode = 1
Encode = UTF-8
[DM5237]
Description = DM8 Instance GRP1_RT_02
Driver = DM8 ODBC DRIVER
Server = 10.36.41.13:5237
UID = SYSDBA
PWD = Wei050210
Database = GRP1_RT_02
LoginMode = 1
Encode = UTF-8
Server:使用 IP:端口 格式,推荐实际 IP 而非 localhost。Database:填写达梦实例名。设置动态库路径,使系统能找到 libdodbc.so:
export LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
isql -v DM5236 SYSDBA Wei050210
出现 Connected! 和 SQL> 提示符即表示连接成功。随后可执行查询:
SQL> SELECT 'Hello ODBC!' FROM DUAL;
/etc/odbcinst.ini 中的 Driver 路径是否正确,以及当前用户是否有库的执行权限。telnet 10.36.41.13 5236 验证端口可达性。Encode 参数与数据库字符集一致(一般为 UTF-8)。在 isql 中,可以像使用传统 SQL 客户端一样探索达梦:
-- 查看版本
SELECT * FROM V$VERSION;
-- 列出当前用户所有表
SELECT TABLE_NAME FROM USER_TABLES;
-- 查找著名 EMP 表在哪个模式下
SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE TABLE_NAME='EMP';
假如结果显示 EMP 属于 NEWSCHEMA 模式,则需用 NEWSCHEMA.EMP 访问:
SELECT * FROM NEWSCHEMA.EMP;
这就是达梦的模式(Schema)隔离机制,与 Oracle 类似,表名前需要带上模式名。
JDBC 和 ODBC 是数据库连接接口标准。
| 对比维度 | JDBC | ODBC |
|---|---|---|
| 面向语言 | Java | C/C++、Python、C# 等通用语言 |
| 核心实现 | 各数据库提供 Java 驱动 jar 包 | 各数据库提供 ODBC 驱动库(.so/.dll),并由 ODBC 管理器加载 |
| 使用方式 | Class.forName 加载驱动,DriverManager 获取连接 |
配置数据源(DSN),应用通过 DSN 连接 |
| 适用场景 | Java 生态(Spring、MyBatis 等) | 跨语言、系统集成、BI 工具(如 Excel、Power BI 通过 ODBC 连数据库) |
两者解决的是同一个问题:让应用程序无需为每种数据库编写不同代码。达梦同时支持 JDBC 和 ODBC,使得无论使用 Java 还是 Python,都能轻松对接。
本文在完全离线的麒麟 V10 系统上,成功配置了达梦 DM8 的 JDBC 和 ODBC 连接,并进行了基础交互。关键点回顾:
文章
阅读量
获赞
