注册
JDBC、ODBC、DBLINK配置
专栏/技术分享/ 文章详情 /

JDBC、ODBC、DBLINK配置

DM_lll 2026/09/23 241 0 0
摘要

JDBC

简介

  • JDBC (Java Database Connectivity) 是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。
  • DM JDBC 数据库驱动程序是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问,JDBC 驱动程序的主要功能包括:
  • 建立与 DM 数据库的连接。
  • 转接发送 SQL 语句到数据库。
  • 处理并返回语句执行结果。
  • 由于 DM JDBC 驱动遵照 JDBC 标准规范设计与开发,因此 DM ODBC 接口提供的函数与标准 JDBC 一致。JDBC 接口函数较多,下表仅列出了 DM JDBC 主要接口和函数:
主要类或接口 类或接口说明 主要函数与函数说明
java.sql.DriverManager 用于管理驱动程序、并可与数据库建立连接。其类中的方法均为静态方法。 getConnection 创建连接、setLoginTimerout设置登录超时时间、registerDriver注册驱动、deregisterDriver卸载驱动
java.sql.Connection 数据库连接类,作用是管理执行数据库的连接,可用于提交和回滚事务、创建Statement对象等操作。 createStatement创建一个 Statement对象、setAutoCommit设置自动提交、close关闭数据库连接、commit提交事务、rollback回滚事务
java.sql.Statement 用于在连接上运行SQL 语句,并可访问结果。 execute运行 SQL 语句,executeQuery执行一条返回 ResultSet的 SQL 语句,executeUpdate执行 INSERT、UPDATE、DELETE 或一条没有返回数据集的 SQL 语句,getResultSet用于得到当前 ResultSet的结果
java.sql.ResultSet 结果集对象,主要用于查询结果访问 absolute将结果集的记录指针移动到指定行、next将结果集的记录指针定位到下一行、last将结果集的记录指针定位到最后一行、close释放 ResultSet 对象
java.sql.DatabaseMetaData 用于获取数据库元数据信息的类,如模式信息、表信息、表权限信息、表列信息、存储过程信息等 getTables 得到指定参数的表信息、getColumns 得到指定表的列信息、getPrimaryKeys得到指定表的主键信息、getTypeInfo 得到当前数据库的数据类型信息、getExportedKeys得到制定表的外键信息
java.sql.ResultSetMetaData 用于获取结果集元数据信息的类,如结果集的列数、列的名称、列的数据类型、列大小等信息 getColumnCount得到数据集中的列数、getColumnName 得到数据集中指定的列名、getColumnLabel得到数据集中指定的标签、getColumnType 得到数据集中指定的数据类型

步骤

1、下载并安装好jdk

[root@ ~]# tar -zvxf jdk-8u202-linux-x64.tar.gz
[root@ ~]# mv jdk1.8.0_202/ /usr/local/java

2、编辑/etc/profile文件

[dmdba@ ~]$ vi .bash_profile
#需要在dmdba下配置环境变量,按照实际的安装路径填写
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre:/home/dmdba/dm/dmdbms/drivers/jdbc
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib: /home/dmdba/dm/dmdbms/drivers/jdbc/DmJdbcDriver8.jar
export PATH=${JAVA_HOME}/bin:$PATH

3、使配置生效并查看当前版本

[dmdba@ ~]$ source .bash_profile
[dmdba@ ~]$ java -version

4、创建项目

创建目录

[root@ ~]# mkdir /jdbctest
[root@ ~]# chown -R dmdba:dinstall /jdbctest
[root@ jdbctest]# chmod 755 -R /jdbctest/*

配置jdbc连接文件

[dmdba@ ~]$ cd /jdbctest/
[dmdba@ jdbctest]$ vi jdbc_conn.java
package java_jdbctest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbc_conn {
        static Connection conn = null;
        static String cname = "dm.jdbc.driver.DmDriver";
        static String url = "jdbc:dm://localhost:5236";
        static String userid = "SYSDBA";
        static String pwd = "Dameng123";
        public static void main(String[] args) {
                try {
                        Class.forName(cname);
                        conn = DriverManager.getConnection(url, userid, pwd);
                        conn.setAutoCommit(true);
                        System.out.println("[SUCCESS]conn database");
                } catch (Exception e) {
                        System.out.println("[FAIL]conn database:" + e.getMessage());
                }
        }
        public void disConn(Connection conn) throws SQLException {
                if (conn != null) {
                        conn.close();
                }
        }
}

编译文件

[dmdba@ jdbctest]$ javac -d . jdbc_conn.java
[dmdba@ jdbctest]$ ls -lrt
-rwxr-xr-x 1 dmdba:dinstall 1015 9月21 16:30 jdbc_conn.java
drwxr-xr-x 2 dmdba:dinstall   29 9月21 16:33 java_jdbctest

5、测试连接

运行java_jdbctest

[dmdba@ jdbctest]$ java java_jdbctest.jdbc_conn
[SUCCESS]conn database

ODBC

简介

  • ODBC(Open Database Connectivity) 提供访问不同类型的数据库的途径。结构化查询语言 SQL 是一种用来访问数据库的语言。通过使用 ODBC,应用程序能够使用相同的源代码和各种各样的数据库交互。这使得开发者不需要以特殊的数据库管理系统 DBMS 为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。
  • DM ODBC 3.0 遵照 Microsoft ODBC 3.0 规范设计与开发,实现了 ODBC 应用程序与 DM 数据库的互连接口。可以直接调 DM ODBC 3.0 接口函数访问 DM,也可以使用可视化编程工具如 C++ Builder、PowerBuilder 等利用 DM ODBC 3.0 访问 DM 数据库。

步骤

1、下载并安装unixODBC,配置unixODBC连接DM数据库。

(1)下载

进入官网:https://www.unixodbc.org/,选择Download下载软件包。

(2)解压、安装unixODBC

解压

[root@localhost 桌面]# tar-zxvf unixODBC-2.3.0.tar.gz 

安装

[root@localhost 桌面]#cd unixODBC-2.3.0/
[root@localhostunixODBC-2.3.0]#./configure 
[root@localhostunixODBC-2.3.0]#make 
[root@localhostunixODBC-2.3.0]#make install

image.png

(3)配置驱动信息odbcinst.ini

[root@localhost etc]#vim /usr/local/etc/odbcinst.ini
[DM ODBC DRIVER]
Description=ODBC DRIVER FOR DM
Driver =/dm/drivers/odbc/libdodbc.so

(4)配置数据源信息odbc.ini

[root@localhost etc]#vim /usr/local/etc/odbc.ini
[DM] Description =DM ODBC DSN
Driver =DM ODBC DRIVER
SERVER =localhost
UID =SYSDBA
PWD =Dameng123 
TCP_PORT =5240

2、安装dmPython;使用python3连接DM数据库

(1)安装dmPython

[dmdba@localhost~]$cd /dm/drivers/python/dmPython [dmdba@localhostdmPython]$python3 setup.py install

报错:
image.png
错误原因:操作系统目录权限问题,dmdba用户对该目录没有写的权限。
解决方法:

[root@localhost~]#mkdir -p /usr/local/lib64/python3.7/site-packages/ [root@localhost~]#chmod 777 /usr/local/lib64/python3.7/site-packages/

(2)进入python3查看Python的模块搜索路径sys.path,确认Python第三方库的 安装目录是否有dmPython相关包。

[dmdba@localhost~]$python3

image.png

(3)编写python语句连接DM数据库

[dmdba@localhost~]$vim dmtest.py 
Import dmPython conn=dmPython.connect(user='SYSDBA',password='Dameng123',server='127.0.0.1',port=5240) 
cursor=conn.cursor() 
cursor.execute('select empno from U_DMSALM.EMP limit 3') 
values=cursor.fetchall() 
print(values) 
cursor.close() 
conn.close()

(4)运行dmtest.py文件,查看结果:

[dmdba@localhost~]$python3 dmtest.py 

DBLINK

简介

  • DBLINK 是达梦数据库里的数据库对象,保存远程库连接信息,让本地库可以直接访问远程库的表、视图,执行查询、DML,甚至调用远程存储过程;用 @链接名 访问远程对象。
  • 达梦搭建同构dblink是通过达梦MAL系统进行数据传输,达梦通过mal系统实现redo日志传输,以及其他实例间的消息通讯。开启MAL功能后,本地达梦数据库创建dblink即可实现访问;相对而言达梦之间的dblink搭建较为简单。
    步骤

1、修改dm.ini配置文件参数

两台达梦主机修改dm.ini配置文件参数MAL_INI值为1:

[dmdba@~]$ vim /home/dmdba/dmdbms/data/DAMENG/dm.ini

将MAL_INI参数设置为1;
MAL_INI = 1

2、配置dmmal.ini文件

修改两台达梦主机配置dmmal.ini文件内容

[MAL_INST1] 
MAL_INST_NAME =SVR1               # 本地端实例名;
MAL_HOST = 192.168.178.127            # 内网IP;
MAL_PORT = 5536                  # MAL系统端口号;
MAL_INST_HOST = 192.168.178.127  # 外网IP(数据库实例IP);
MAL_INST_PORT = 5236             # 数据库端口号;
 
[MAL_INST2] 
MAL_INST_NAME = SVR2               # 远程端实例名;
MAL_HOST = 192.168.178.128            # 内网IP;
MAL_PORT = 5537                  # MAL系统端口号;
MAL_INST_HOST = 192.168.178.128  # 外网IP(数据库实例IP);
MAL_INST_PORT = 5236             # 数据库端口号;
  • 注意:两台达梦主机的dmmal.ini文件内容要一致;dmmal.ini配置项中的MAL_INST_NAM是实例名,两边的实例名不能相同;为得到dblink的使用效果,在测试环境下,选择关闭防火墙和SELINUX,设置为开启不自启;

3、达梦两边主机重启数据库服务:

本地端重启服务:

[dmdba@ bin]$ ./DmServerSVR1 restart

远程端重启服务:

[dmdba@ bin]$ ./DmServerSVR2 restart

4、创建dblink语句:

创建私有dblink:

CREATE LINK testdblink CONNECT WITH "SYSDBA" IDENTIFIED BY "Dameng123" USING '192.168.178.128/5236';

创建公有dblink:

CREATE PUBLIC LINK testdblink CONNECT WITH "SYSDBA" IDENTIFIED BY "Dameng123" USING '192.168.178.128/5236';

5、DBLINK使用

(1)查看dblink信息

SELECT OBJECT_NAME,OWNER FROM SYS.DBA_OBJECTS WHERE OBJECT_TYPE='DBLINK';

(2) 本地dblink查看远程数据

SELECT * FROM DEPT@TESTDBLINK;

(3) 执行DML语句

INSERT INTO DEPT@TESTDBLINK VALUES (50,'TECH','BEIJING');
UPDATE DEPT@TESTDBLINK SET DNAME='TEACH' WHERE DEPTNO=50;
DELETE FROM DEPT@TESTDBLINK WHERE DEPTNO=50;

(4) 执行存储过程

CALL 存储过程名@ TESTDBLINK (参数);

注意

1、数据库连接目前只支持 DM、Oracle 或 ODBC。
2、DM-DM 的同构数据库链接不支持 MPP 环境,DM 与异构数据库的数据库链接支持 MPP 环境。
3、增删改不支持 INTO 语句。
4、不支持使用游标进行增删改操作。
5、不支持操作远程表的复合类型列。
7、DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服