在使用C++连接数据库的时候,你可以选择ODBC或者ADO等方式,但是OTL连接数据库确实挺方便的,它所有的代码都放在一个头文件otlv4.h中,我们在写程序的时候直接将头文件包含进来,就可以调用其中的类中的函数进行数据库的连接,增删改查等操作。最近一直在使用Oracle数据库,这次就使用OTL连接Oracle数据库,Oracle数据库提供一个调用的接口(OCI),是Oracle公司开发的一个应用程序开发工具,是一个通过访问Oracle数据库的服务器,控制各类sql语句的执行,进而创建应用程序接口(API),OTL就是通过OCI对Oracle数据库进行操作。
在里面有一个auto_commit_on函数是来设置auto_commit标志的,当auto_commit=1是设置每一个执行的SQL语句都会自动提交,就是做一步就有一步的改变,如果是等于0,那么就是要整个sql语句成功才算成功
连接案例:
#include <iostream>
#include <stdio.h>
#define OTL_ORA11G_R2
#if defined(__BORLANDC__)
#define OTL_BIGINT __int64 // Enabling G++ 64-bit integers
#define OTL_UBIGINT unsigned __int64 // Enabling G++ 64-bit integers
#elif !defined(_MSC_VER)
#define OTL_BIGINT long long // Enabling G++ 64-bit integers
#define OTL_UBIGINT unsigned long long // Enabling G++ 64-bit integers
#else
#define OTL_BIGINT __int64 // Enabling VC++ 64-bit integers
#define OTL_UBIGINT unsigned __int64 // Enabling VC++ 64-bit integers
#endif
#include "otlv4.h"
using namespace std;
otl_connect gbase_db;
int main(void)
{
try{
otl_connect::otl_initialize();
gbase_db.rlogon("informix/informix@//192.168.56.102:8311/gci_demodb");
cout << "connect succeed" << endl;
}
catch(otl_exception& p)
{
cerr << p.msg << endl;
cerr << p.stm_text << endl;
cerr << p.var_info << endl;
}
gbase_db.logoff();
return 0;
}
使用OTL编译案例
g++ testOTL.cpp -I/home/informix/soft/GBaseGCI_1.6.4G6_5P201801023.RHEL6_x86_64/include/ -lclntsh -L/home/informix/soft/GBaseGCI_1.6.4G6_5P201801023.RHEL6_x86_64/lib
用OTL连接数据库,其中因为GCI与OCI接口有一点不同,而OTL里面使用了OCI接口所以需要修改一点OTL库代码,问题是int*不能转换到boolean*,
解决方法是int*强转(boolean*)
使用动态连接库时 需要设置环境变量LD_LIBRARY_PATH指定动态库所在路径,或者在ld.so.conf文件中加入动态库路径 echo "/usr/local/lib" >> /etc/ld.so.conf
OTL连接数据库gbase_db.rlogon("informix/informix@/");后面再加什么都不抛出异常,如果gbase_db.rlogon("informix/informix@")就抛出异常
C++交流群:585225803