unixODBC的使用

unixODBC介绍

unixODBC is a complete, free/open, ODBC solution for UNIX/Linux.

unixODBC版本目前有两套,soname为libodbc.so.1与soname为libodbc.so.2

对于使用libodbc.so.1的驱动下载unixODBC-2.3.0.tar.gz,作者自己发现最高版本的libodbc.so.1库;
对于使用libodbc.so.2的驱动下载最新的unixODBC即可。

环境搭建与使用

安装unixODBC

tar xf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0
./configure --prefix=/usr/local/unixODBC2_3_0 --enable-gui=no
make 
make install

oracle 驱动安装配置

参考oracle官方ODBC驱动的说明,驱动文件版本,依赖的basic库文件以及推荐的unixODBC框架版本:Oracle Instant Client ODBC Release Notes

下载oracle11官方提供的odbc Driver

安装上面的两个文件,并将/usr/lib/oracle/11.2/client64/lib与/usr/local/unixODBC2_3_0/lib两个路径追加到/etc/ld.so.conf,
执行ldconfig

配置ODBC驱动

/usr/local/unixODBC2_3_0/etc/odbcinst.ini 驱动配置文件

[Oracle_11g_ODBC_driver]
Description     = Oracle ODBC driver for Oracle 11g
Driver          = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
Setup           =
FileUsage       =
CPTimeout       =
CPReuse         = 

/usr/local/unixODBC2_3_0/etc/odbc.ini 客户端配置文件

[OSR]
Trace       = On
TraceFile   = stderr
Driver = Oracle_11g_ODBC_driver
ServerName = //10.10.16.189:1521/orcl
UserID = system
Password = passwd

使用unixODBC提供的命令行工具登录数据库即可

/usr/local/unixODBC2_3_0/bin/isql OSR

mysql驱动安装配置

安装部署参考官方文档https://dev.mysql.com/downloads/connector/,可以下载最新的驱动文件,参考最新的文档

  1. 使用yum安装 yum install mysql-connector-odbc
  2. 驱动文件配置/usr/local/unixODBC/etc/odbcinst.ini

    [MySQL]
    Description = MySQL ODBC driver
    Driver = /usr/lib64/libmyodbc5.so # 通过命令rpm -ql mysql-connector-odbc查看路径
  3. 客户端文件配置/usr/local/unixODBC/etc/odbc.ini

    [my222]
    Driver = MySQL
    SERVER = 192.168.2.222
    PORT = 3306
    USER = root
    PASSWORD = password
    DATABASE = DB
  4. /usr/local/unixODBC/bin/isql my222使用unixODBC终端工具访问数据库

unixODBC开发

对于unixODBC编程,参考isql的源码即可

### 如何在Unix系统中使用unixODBC静态库进行开发 #### 配置编译环境 为了能够在Unix系统上使用unixODBC静态库进行开发,首先需要确保已经正确安装了unixODBC及其开发文件。可以通过源码编译的方式安装带有静态库支持的unixODBC版本[^1]。 ```bash ./configure --enable-static=yes --prefix=/usr/local/unixodbc make && make install ``` 这会将unixODBC以及其静态库(`libodbc.a`)安装到指定目录下。 #### 编写应用程序代码 编写C/C++程序时,需包含必要的头文件并链接相应的静态库。下面是一个简单的例子来展示如何连接SQL Server数据库: ```c #include <stdio.h> #include <sql.h> #include <sqlext.h> int main() { SQLHENV hEnv; SQLHDBC hDbc; // 初始化环境句柄 if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) != SQL_SUCCESS || SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0) != SQL_SUCCESS || SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc) != SQL_SUCCESS) { printf("Failed to initialize ODBC environment\n"); return -1; } // 连接到数据源 if (SQLConnect(hDbc, (SQLCHAR *)"DSN=mydsn", SQL_NTS, NULL, 0, NULL, 0) != SQL_SUCCESS) { printf("Could not connect to data source.\n"); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return -1; } // 执行查询... // 清理资源 SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return 0; } ``` #### 编译与链接 当编译上述代码时,应指明gcc/g++查找静态库的位置,并显式地告诉它要链接哪些库。假设unixODBC被安装到了`/usr/local/unixodbc`: ```bash gcc -o myapp myapp.c \ -I/usr/local/unixodbc/include \ -L/usr/local/unixodbc/lib \ -lodbc -lodbcinst -static-libgcc ``` 这里的关键在于使用 `-L` 参数指向静态库所在的路径,而 `-l` 后跟的就是所需的库名(去掉前缀 `lib` 和后缀 `.a`)。另外加上 `-static-libgcc` 来强制静态链接GCC标准库[^2]。 #### 设置运行时环境变量 即使采用静态链接方式构建应用,某些情况下仍可能依赖于共享库中的符号解析或其他动态加载特性。因此建议设置适当的环境变量以便顺利运行程序: ```bash export LD_LIBRARY_PATH=/usr/local/unixodbc/lib:$LD_LIBRARY_PATH ``` 尽管对于完全静态化的二进制来说这不是绝对必需的操作,但在遇到问题时这样做有助于排除潜在的依赖关系错误[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

callinglove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值