otl mysql 下载_OTL mySQL

C++使用OTL与mySql交互

OTL 一般概念

当OTL用于oracle数据库时可以通过oracle数据库提供的接口;当OTL用于非oracle数据库时,OTL提供了odbc接口(oracle数据库也提供),所以使用OTL来控制非oracle数据库均需先安装对应数据库的odbc驱动。

因为对于不同的数据库OTL使用不同的odbc,所以在使用OTL之前需要定义一些宏,告知OTL当前使用的数据库类型。

使用OTL操作mysql

在使用OTL前需要安装myodbc。如果使用5.1及以上版本的myodbc,需要配置mySql使其默认编码方式为utf-8。参考1参考2

在引用otlv4.h头文件之前要先定义几个宏(参考):

#define OTL_ODBC // Compile OTL 4.0/ODBC

// The following #define is required with MyODBC 5.1 and higher

#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE

#define OTL_UNICODE // Compile OTL with Unicode

编译OTL时添加链接库:win32: LIBS+=-lodbc32,为了在尽可能的减少依赖,在发布软件时,使用静态的链接选项(以Qt为例):QMAKE_LFLAGS+=-static

使用

OTL的使用流程

* 首先定义宏,指明所使用的数据库类型并设置环境。如#define OTL_ORA9I

* 定义otl_connect对象。otl_connect db; // connect object

* 使用otl_connect的静态方法otl_initialize()初始化OTL环境。otl_connect::otl_initialize();

* 使用otl_connect的rlogon()方法连接数据库。db.rlogon("user_id/password@odbc_data_source_name");,

* 定义otl_stream()对象。如下示例中所示

* 使用otl_stream的<

* 使用otl_stream的>>操作符读取返回结果

* 调用otl_connect的logoff()方法从数据库断开

示例(仅作为参考,具体例子参考官方资料)

//use #define OTL_UNICODE

try {

//insert

otl_stream insert_data(

1,// buffer size should be == 1 always on INSERT.

"insert into t_belt_realtime_data(velocity, cumulation, datetime, belt_id, logs )"

"values(:velocity,:cumulation,:datetime,:belt_id, :logs)",

// SQL statement, char[5] means 5 2-byte. Unicode charatcters including a null terminator

db_ // connect object

);

//每次填充一个数据,从左到右,当前的例子一共需要填充5次数据

insert_data<(data.first);//std::pair data; 将数据转化为与sql语句中对应占位符相同的类型

insert_data<(data.second);

insert_data<(time(nullptr));

insert_data<(0);

unsigned short tmp[32]; // Null terminated Unicode character array.

tmp[0]=1111; // Unicode character (decimal code of 1111)

tmp[4]=0; // Unicode null terminator

insert_data<

//select

char str_sql[] = "select velocity, cumulation fromt_belt_realtime_data "//注意sql语句中的空格

" WHERE datetime >= :time_tem" ;

otl_stream select_data(

1,//指定缓冲行数,OTL中应该还有一层隐藏的缓冲区,这里指定的缓冲区只是指定每次OTL填充的行数。

(const char*)str_sql,

db_ );

select_data<(0);

float v,c;

while(!select_data.eof()) { //显示所有数据,虽然说缓冲区只设定为1

//执行str_sql之后返回的数据的行数可能大于1,但OTL会将他们保存在其默认缓冲区中。

//只有select_data中所有有效行都迭代完成之后eof才会置true。

select>>v>>c;

cout<

}

} catch(otl_exception& p) {

cerr<

cerr<

cerr<

}

占位符:示例第一句语句中由冒号开头的变量为占位符参数,我们需要使用<

* float:4-byte floating point number

* int:signed 32-bit int

* short:short int (16-bit signed integer)

* unsigned:unsigned int (32-bit unsigned integer)

* char[length]:由NUL结尾的字符串,最大长度依赖于数据库(length参数是必须的,length表示的是字符个数且length中包含了NUL)。如果定义了宏OTL_UNICODE,那么字符串的编码方式为UTF-16(每个字符两字节),且依旧使用NUL结尾。(char[11]可以用于绑定varchar(9))。

* 其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值