一、引言
ODBC(Open Database Connectivity,开放数据库互连)是一种用于访问数据库的应用程序编程接口(API)。它允许应用程序通过一个通用的接口与多种不同类型的数据源进行交互,而无需针对每个数据库管理系统(DBMS)编写特定的代码。
简而言之,通过使用ODBC,应用程序能够使用相同的源代码和不同的数据库进行交互。
在介绍如何使用ODBC方法访问DM数据库服务器之前,我会先简单介绍一下ODBC(想要具体了解的可以自行去搜索相关内容),毕竟我在学习ODBC连接DM数据库之前也完全不了解ODBC。
二、ODBC的组成
ODBC主要由三部分组成,包括:
驱动管理器Driver Manager:负责管理应用程序与数据库驱动程序之间的通信。
数据库驱动程序Database Drivers:负责将ODBC的通用接口转换为数据库管理系统能够理解的特定接口。例如,MySQL有一个MySQL ODBC驱动程序,Oracle有一个Oracle ODBC驱动程序等。
数据源Data Source:连接到数据库所需的信息,包括数据库名称、服务器地址、用户名、密码等。应用程序在使用ODBC连接数据库时,只需要指定数据源的名称,而无需关心具体的连接细节。
整个框架如下图所示。
三、ODBC的工作原理
应用程序通过ODBC连接数据库大致流程如下:
调用0DBC API函数→DM(Driver Manager)根据名称查找相应DD(Database Drivers)→>DM加载相应DD,并发送连接请求→DD使用DS(Data Source)相关信息与数据库建立连接。
为了实现这样的连接过程,我们需要用到句柄的概念。常见的四个句柄有环境句柄,连接句柄,语句句柄和描述句柄。
环境句柄HENV:建立应用程序和0DBC系统之间的联系,只有一个。
连接句柄HDBC:把ODBC和数据源建立起联系。
语句句柄HSTMT:用来与S0L语句操作建立联系,以便执行SOL语句,一个语句句柄对应一个SOL语句的执行。
描述句柄:描述句柄其实就是描述符,描述符指的是SQL语句的参数和结果集的列的元数据的集合。这个大概了解就好。
在一个环境句柄下可以创建多个连接句柄,通过这些连接句柄,应用程序可以实现与多个不同数据源的连接,为应用程序提供同时处理不同数据库系统数据的能力,同样,在一个连接句柄下可以申请多个语句句柄,使用这些语句句柄执行多个SQL语句。
每种句柄都有多个状态,通过不同的ODBC函数,句柄的状态会发生转变,这里我不具体介绍了,在后面提到的时候会描述一下。
四、ODBC连接DM数据库
4.1 数据源创建
配置ODBC环境前,DM数据库安装请自行参考其他博客。
数据源创建分Windows和Linux两种,我这里只介绍Linux环境下创建ODBC数据源的方法,对Windows环境下相关内容感兴趣的可以去达梦社区里看看。
4.1.1 下载unixOBDC和unixOBDC-devel
下载地址:阿里巴巴开源镜像站-阿里云官网开发者社区_云计算社区
4.1.2 安装unixODBC和unixODBC-devel
执行以下命令
rpm -ivh unixODBC-devel-2.3.1-14.el7.x86_64.rpm unixODBC-2.3.1-14.el7.x86_64.rpm
(根据下载的版本号自行修改)
在4.1.3之前其实还有一个方法,是我的同事分享给我的,我不具体展开了,前面行不通的同学可以自行去他的博客看看:https://blog.youkuaiyun.com/wzy18253926870/article/details/147166083?spm=1001.2014.3001.5502,如果是像这样解压安装包的记得执行./configure和make && make install
4.1.3查看安装结果
执行以下命令
odbcinst -j
4.1.4 配置 DM 数据源
配置 /etc/odbcinst.ini 文件
vi odbcinst.ini
在 odbcinst.ini 文件中添加以下信息
[DM8 ODBC DRIVER]
Description = DM ODBC DRIVER FOR DM8
Driver = /opt/dm8/bin
配置 /etc/odbc.ini 文件
vi odbc.ini
在 odbc.ini 文件中添加以下信息:
[DM]
DRIVER = DM8 ODBC DRIVER
SERVER = 192.xxx.xxx.xxx
UID = SYSDBA
PWD = ******
TCP_PORT = 5236
4.1.5 gcc 环境检查
执行以下命令
gcc --version
(这里其实可以跳过,前面都成功的话gcc环境应该是没有问题的,别问我怎么知道的,问就是因为我因为gcc问题在前面卡了半天)
4.2数据库连接测试
dmdba用户在任意位置执行isql dm8,都可以出现以下结果
4.3开发示例
对ODBC连接DM数据库之后的开发操作感兴趣的可以去达梦社区里看看,包括增删改查等操作。
社区地址:https://eco.dameng.com