otl c mysql_C++07:使用OTL操作MySQL数据库

C++07:使用OTL操作MySQL数据库

2009-10-29 14:46

一、编写代码

注:以下代码来自OTL示例,略有改动#include

using namespace std;

#include

#include

#include

#define OTL_ODBC // Compile OTL 4.0/ODBC

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

#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE

#define OTL_ODBC_UNIX // uncomment this line if UnixODBC is used

#include // include the OTL 4.0 header file

otl_connect db; // connect object

void insert()

// insert rows into table

{

otl_stream o(1, // buffer size should be == 1 always on INSERT

"insert into test_tab values "

" (:f1,:f2), "

" (:f12,:f22), "

" (:f13,:f23), "

" (:f14,:f24), "

" (:f15,:f25) ",

// INSERT statement. Multiple sets of values can be used

// to work around the lack of the bulk interface

db // connect object

);

// If the number of rows to be inserted is not known in advance,

// another stream with the same INSERT can be opened

otl_stream o2(1, // buffer size should be == 1 always on INSERT

"insert into test_tab values "

" (:f1,:f2)", db // connect object

);

char tmp[32];

int i;

for (i = 1; i <= 100; ++i) {

sprintf(tmp, "Name%d", i);

o << i << tmp;

}

for (i = 101; i <= 103; ++i) {

sprintf(tmp, "Name%d", i);

o2 << i << tmp;

}

}

void update(const int af1)

// insert rows into table

{

otl_stream o(1, // buffer size should be == 1 always on UPDATE

"UPDATE test_tab "

" SET f2=:f2 "

" WHERE f1=:f1",

// UPDATE statement

db // connect object

);

o << "Name changed" << af1;

o << otl_null() << af1 + 1; // set f2 to NULL

}

void select(const int af1) {

otl_stream i(50, // buffer size may be > 1

"select * from test_tab "

"where f1>=:f11 "

" and f1<=:f12*2",

// SELECT statement

db // connect object

);

// create select stream

int f1;

char f2[31];

i << af1 << af1; // :f11 = af1, :f12 = af1

while (!i.eof()) { // while not end-of-data

i >> f1;

cout << "f1=" << f1 << ", f2=";

i >> f2;

if (i.is_null())

cout << "NULL";

else

cout << f2;

cout << endl;

}

}

int main() {

otl_connect::otl_initialize(); // initialize ODBC environment

try {

// db.rlogon("UID=xuanyuan;PWD=xuanyuan;DSN=examples"); // connect to ODBC

db.rlogon("xuanyuan/xuanyuan@examples"); // connect to ODBC, alternative format of connect string

otl_cursor::direct_exec(db, "use examples"); // 此行在原示例代码中没有,必须使用use xxx切换数据库

otl_cursor::direct_exec(db, "drop table test_tab",

otl_exception::disabled // disable OTL exceptions

); // drop table

otl_cursor::direct_exec(db,

"create table test_tab(f1 int, f2 varchar(30)) type=innoDB"); // create table

insert(); // insert records into the table

update(10); // update records in the table

select(8); // select records from the table

}

catch (otl_exception& p) { // intercept OTL exceptions

cerr << p.msg << endl; // print out error message

cerr << p.stm_text << endl; // print out SQL that caused the error

cerr << p.sqlstate << endl; // print out SQLSTATE message

cerr << p.var_info << endl; // print out the variable that caused the error

}

db.logoff(); // disconnect from ODBC

return 0;

}

二、编译代码g++ -o"otl_test2" otl_test2.cpp -lmyodbc3

三、运行程序 otl_test$ ./otl_test2

结果如下:f1=8, f2=Name8

f1=9, f2=Name9

f1=10, f2=Name changed

f1=11, f2=NULL

f1=12, f2=Name12

f1=13, f2=Name13

f1=14, f2=Name14

f1=15, f2=Name15

f1=16, f2=Name16

四、关于OTL更多的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值