达梦数据库支持通过 JDBC(Java Database Connectivity)和 ODBC(Open Database Connectivity)两种标准接口进行连接。JDBC 是 Java 应用程序连接数据库的工业标准,ODBC 是 C/C++ 应用程序连接数据库的通用接口。本文档记录在 CentOS 7 环境下配置达梦数据库 JDBC 和 ODBC 连接的完整过程及遇到的问题与解决方案。
| 项目 | 信息 |
|---|---|
| 操作系统 | CentOS 7 (Core) |
| 数据库版本 | 达梦 V8 |
| 数据库安装目录 | /home/dmdba/dmdbms |
| 主库 IP/端口 | 192.168.200.18:5237 |
| 备库 IP/端口 | 192.168.201.90:5236 |
| 测试用户 | SYSDBA |
| 测试密码 | Admin2026 |
| 测试表 | test_rw(含 ID、NAME 两列) |
用户切换说明:
dmdba 用户运行/etc/odbc.ini、/etc/odbcinst.ini)的修改需要 root 权限dmdba 用户下进行JDBC(Java Database Connectivity)是 Java 应用程序连接数据库的标准接口。达梦提供了专门的 JDBC 驱动 DmJdbcDriver8.jar,应用程序通过加载该驱动,使用标准的 JDBC URL 格式 jdbc:dm://IP:端口 建立连接。
步骤1:确认 JDBC 驱动文件(dmdba 用户)
ls -lh /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar
输出:
-rwxr-xr-x 1 dmdba dinstall 1.5M Jul 2 08:44 /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar
步骤2:确认 Java 环境(dmdba 用户)
使用达梦自带的 JDK:
/home/dmdba/dmdbms/jdk/bin/java -version
输出:
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
步骤3:编写 JDBC 测试程序(dmdba 用户)
创建 /tmp/TestJDBC.java:
import java.sql.*;
public class TestJDBC {
public static void main(String[] args) {
String url = "jdbc:dm://192.168.200.18:5237";
String user = "SYSDBA";
String password = "Admin2026";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("dm.jdbc.driver.DmDriver");
conn = DriverManager.getConnection(url, user, password);
System.out.println("JDBC 连接成功!");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT SYSDATE");
if (rs.next()) {
System.out.println("当前时间: " + rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try { if (rs != null) rs.close(); } catch (Exception e) {}
try { if (stmt != null) stmt.close(); } catch (Exception e) {}
try { if (conn != null) conn.close(); } catch (Exception e) {}
}
}
}
步骤4:编译并运行(dmdba 用户)
/home/dmdba/dmdbms/jdk/bin/javac -cp /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar /tmp/TestJDBC.java /home/dmdba/dmdbms/jdk/bin/java -cp .:/home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar:/tmp TestJDBC
输出:
JDBC 连接成功!
当前时间: 2026-08-03 14:13:49
| 问题 | 原因 | 解决方法 |
|---|---|---|
javac: command not found |
系统未安装 JDK 或 JAVA_HOME 未设置 | 使用达梦自带 JDK:/home/dmdba/dmdbms/jdk/bin/javac |
ClassNotFoundException |
classpath 未正确指定驱动 JAR 路径 | 使用 -cp 参数指定 DmJdbcDriver8.jar 路径 |
ODBC(Open Database Connectivity)是由微软定义的一套标准 API,用于访问数据库管理系统。在 Linux 环境下,通常使用 unixODBC 作为 ODBC 驱动管理器。配置 ODBC 需要两个文件:
/etc/odbcinst.ini:定义 ODBC 驱动库的位置/etc/odbc.ini:定义数据源(DSN)的连接参数步骤1:安装 unixODBC(root 用户)
yum install -y unixODBC unixODBC-devel
输出:
已安装:
unixODBC.x86_64 0:2.3.1-14.el7
unixODBC-devel.x86_64 0:2.3.1-14.el7
完毕!
步骤2:确认达梦 ODBC 驱动文件(root 用户)
ls -lh /home/dmdba/dmdbms/bin/libdodbc.so
输出:
-rwxr-xr-x 1 dmdba dinstall 1.2M Jul 2 08:44 /home/dmdba/dmdbms/bin/libdodbc.so
步骤3:配置驱动注册文件 /etc/odbcinst.ini(root 用户)
cat > /etc/odbcinst.ini << 'EOF'
[DM8 ODBC DRIVER]
Description = ODBC Driver for Dameng Database
Driver = /home/dmdba/dmdbms/bin/libdodbc.so
EOF
步骤4:配置数据源文件 /etc/odbc.ini(root 用户)
cat > /etc/odbc.ini << 'EOF'
[DM8]
Description = Dameng Database (Primary)
Driver = DM8 ODBC DRIVER
Server = 192.168.200.18
Port = 5237
UID = SYSDBA
PWD = Admin2026
EOF
步骤5:测试 ODBC 连接(dmdba 用户)
isql -v DM8
输出:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> SELECT SYSDATE;
+--------------------+
| SYSDATE |
+--------------------+
| 2026-08-03 14:18:22|
+--------------------+
SQLRowCount returns 1
1 rows fetched
| 问题 | 原因 | 解决方法 |
|---|---|---|
[ISQL]ERROR: Could not SQLConnect + 用户名或密码错误 |
配置文件中使用了 User/Password 参数,部分版本不识别 |
改用 UID/PWD 参数 |
Permission denied 写入 /etc/odbc.ini |
普通用户无权修改 /etc 目录 |
切换到 root 用户执行 |
步骤1:添加备库数据源(root 用户)
cat >> /etc/odbc.ini << 'EOF'
[DM8_STANDBY]
Description = Dameng Database (Standby)
Driver = DM8 ODBC DRIVER
Server = 192.168.201.90
Port = 5236
UID = SYSDBA
PWD = Admin2026
EOF
步骤2:连接备库并测试(dmdba 用户)
isql DM8_STANDBY
SQL> INSERT INTO test_rw VALUES (3, 'odbc_test');
输出:
[ISQL]ERROR: Could not SQLExecute
SQL> SELECT * FROM test_rw;
输出:
+------------+---------------------------------------------------+
| ID | NAME |
+------------+---------------------------------------------------+
| 1 | read_write_test |
| 888 | switchover_ok |
+------------+---------------------------------------------------+
SQLRowCount returns 2
2 rows fetched
备库只读验证通过:INSERT 被拒绝,SELECT 可正常查询同步数据。
通过本次配置,完成了达梦数据库的 JDBC 和 ODBC 连接配置,验证结果如下:
| 连接方式 | 数据源 | 连接状态 | 读写验证 |
|---|---|---|---|
| JDBC | 192.168.200.18:5237 | 成功 | 可查询 |
| ODBC 主库 | DM8 | 成功 | 可读写 |
| ODBC 备库 | DM8_STANDBY | 成功 | 只读(读写分离验证) |
关键经验:
javac 命令找不到时,可使用达梦自带的 JDK(/home/dmdba/dmdbms/jdk/bin/)编译和运行 Java 程序。/etc/odbc.ini 中,参数名应使用 UID/PWD 而非 User/Password。root 用户下进行,应用程序测试可在 dmdba 用户下进行。isql 退出时使用 quit(不带分号),使用 exit; 可能报错。文章
阅读量
获赞
