注册
JDBC 、ODBC接口连接及dm8-dm8DBLINK配置
专栏/技术分享/ 文章详情 /

JDBC 、ODBC接口连接及dm8-dm8DBLINK配置

管杨 2026/10/16 189 0 0
摘要

JDBC 接口

1. JDBC 原理

JDBC(Java Database Connectivity)是 Java 定义的数据库访问标准接口,不直接操作数据库,由数据库厂商提供驱动实现接口。应用程序通过 JDBC API 调用驱动,建立连接、执行 SQL、获取结果集。
核心组件:
Driver:数据库驱动,负责协议通信
Connection:数据库连接对象
Statement / PreparedStatement:SQL 执行对象
ResultSet:查询结果集
DriverManager:驱动管理类

2.达梦JDBC驱动信息

驱动包:DmJdbcDriver8.jar(JDK1.8)
驱动类:dm.jdbc.driver.DmDriver
URL 格式:jdbc:dm://IP:PORT? 参数

3.Java 示例代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DmJdbcDemo {
    public static void main(String[] args) {
        String driverClass = "dm.jdbc.driver.DmDriver";
        String url = "jdbc:dm://192.168.121.151:5236";
        String user = "SYSDBA";
        String pwd = "******";

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //加载驱动
            Class.forName(driverClass);
            //获取连接
            conn = DriverManager.getConnection(url,user,pwd);
            System.out.println("数据库连接成功!");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM SYS.ALL_USERS;");
            while(rs.next()){
                System.out.println(rs.getString(1));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //关闭资源
            if(rs!=null) try{rs.close();}catch(Exception e){}
            if(stmt!=null) try{stmt.close();}catch(Exception e){}
            if(conn!=null) try{conn.close();}catch(Exception e){}
        }
    }
}

image.png

4.接口配置要点

项目引入DmJdbcDriver8.jar,Maven 可配置本地jar依赖
image.png
开放数据库端口5236,防火墙放行,账号授予连接、查询权限
达梦数据库开启远程访问,修改dm.ini中LISTEN_IP(生产环境为了安全,指定ip)

ODBC 接口

1.ODBC原理

ODBC(Open Database Connectivity)微软制定的数据库访问标准,C 语言接口,多用于 Windows 平台。应用程序调用 ODBC API,通过 ODBC 驱动程序连接数据库。

2.ODBC配置步骤(Windows)

1)打开ODBC数据源管理器
地址:C:\Windows\System32\odbcad32.exe
在【系统DSN】页签下添加数据源 → 选择 DM8 ODBC DRIVER,完成后页面填写信息,点击【测试连接】,提示连接成功即配置完成
image.png
image.png
2)C语言ODBC简单示例

#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <stdio.h>

void PrintOdbcError(SQLHANDLE hHandle, SQLSMALLINT hType)
{
    SQLCHAR szSqlState[6];
    SQLCHAR szMsg[256];
    SQLINTEGER nNativeErr;
    SQLSMALLINT nMsgLen;
    SQLRETURN ret;
    int i = 1;
    while ((ret = SQLGetDiagRec(hType, hHandle, i, szSqlState, &nNativeErr, szMsg, sizeof(szMsg), &nMsgLen)) == SQL_SUCCESS)
    {
        printf("ODBC错误[%d]: SQLSTATE=%s, 错误码=%d, 信息:%s\n", i, szSqlState, nNativeErr, szMsg);
        i++;
    }
}

int main()
{
    SQLHENV hEnv;
    SQLHDBC hDbc;
    SQLRETURN ret;

    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
    ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

    ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);

    ret = SQLConnect(hDbc,
        (SQLCHAR*)"DM8", SQL_NTS,
        (SQLCHAR*)"SYSDBA", SQL_NTS,
        (SQLCHAR*)"*****", SQL_NTS);

    if (SQL_SUCCEEDED(ret))
    {
        printf("达梦ODBC连接成功!\n");
        SQLDisconnect(hDbc);
    }
    else
    {
        printf("连接失败,打印错误信息:\n");
        PrintOdbcError(hDbc, SQL_HANDLE_DBC);
    }

    SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
    SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
    system("pause");
    return 0;
}

image.png

3.ODBC(Linux)

ODBC是跨语言标准接口,unixODBC作为驱动管理器,加载达梦libdodbc.so驱动;C/C++、Python、PowerBuilder 等可调用统一 ODBC 函数访问数据库。Linux 需要配置两个核心文件:
odbcinst.ini:注册驱动
odbc.ini:定义数据源DSN
1)安装依赖

yum install -y unixODBC unixODBC-devel

image.png
2)/etc/odbcinst.ini

[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dm/dmdbms/bin/libdodbc.so

image.png
3)/etc/odbc.ini

[DM8_DSN]
Description = DM8 Database
Driver = DM8 ODBC DRIVER
Server = 127.0.0.1
UID = SYSDBA
PWD = ******
TCP_PORT = 5236

image.png
4)环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dm/dmdbms/bin
export ODBCINI=/etc/odbc.ini
source ~/.bash_profile

5)测试连接
isql DM8_DSN
image.png

DBLINK配置原理&DM-DM DBLINK配置

1. DBLINK原理

DBLINK(数据库链接):本地数据库创建一个远程数据库访问对象。本地库通过 DBLINK 访问远端库表,透明执行跨库查询。
达梦DBLINK底层:本地数据库作为客户端,使用达梦原生通信协议连接远端达梦实例。
访问语法:表名@DBLINK名称
前提条件:
本地库、远端达梦网络互通,5236 端口通
远端数据库账号,具备对象访问权限
本地库创建 DBLINK 的用户必须有 CREATE DATABASE LINK 权限

2. DM-DM DBLINK完整配置(达梦 SQL)

前提:
两台机器的dm.ini均配置MAL_INI=1,且在/dbdata/dmdata/DAMENG/下创建了dmmal.ini文件:
image.png
1)远端库准备
远端达梦(192.168.121.143)创建测试用户和表,授权:

CREATE USER TEST_USER IDENTIFIED BY "DmTEST123456!";
GRANT RESOURCE,PUBLIC TO TEST_USER;
CREATE TABLE TEST_USER.TAB1(ID INT,NAME VARCHAR(50));
INSERT INTO TEST_USER.TAB1 VALUES(1,'达梦dblink测试');
COMMIT;

image.png
2)本地库创建DBLINK
创建dm到dm的dblink

CREATE OR REPLACE LINK DM_REMOTE CONNECT WITH TEST_USER IDENTIFIED BY "DmTEST123456!" USING '192.168.121.143/5282'; 

查看所有dblink

SELECT * FROM DBA_DB_LINKS;

image.png

SELECT * FROM TEST_USER.TAB1@DM_REMOTE;

image.png
插入数据

INSERT INTO TEST_USER.TAB1@DM_REMOTE VALUES(2,'达梦dblink插入数据');

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服