OTL介绍:
OTL 是 Oracle, Odbc and DB2-CLI
Template Library 的缩写,是一个C++操控关系数据库的模板库,最新版本4.0.104,参见,下载地址。
优点:a.
跨平台
b. 运行效率高,与C语言直接调用API相当
c.
开发效率高,起码比ADO.net使用起来更简单,更简洁
d. 部署容易,不需要ADO组件,不需要.net framework
等
缺点:
a. 只有C++才可以使用她
b. 说明以及范例不足(暂时性的)
总的说来,对于C++程序员而言,使用OTL操作关系数据库是最好的选择,其网站上有很多的范例,本人在这里对使用OTL调用Oracle的存储函数(存储函数比存储过程多个返回值)作一个示范,而其他的比如查询、更新、存储过程等就太简单了,直接看。
Oracle 存储函数 TEST
代码:
( a In Integer, b Out Integer, c in out Integer, d In Long ) Return
Long
is
begin
b := a;
c := 2 * c;
Return( '<' || d
|| '>'
);
end;
说明:Oracle中的long不是C/C++中的长整型,而是varchar_long,对应着OTL中的otl_long_string,这是一种很复杂的类型,本人就用它来举例。
C++调用TEST的代码:
#include
#include
//#define OTL_ORA9I //
使用这个宏就表示使用Oracle9i的API,而不是ODBC API
#define OTL_ODBC // 使用这个宏就表示使用通用的ODBC
API
#include "otlv4.h"
using namespace std;
void main( void
)
{
otl_connect::otl_initialize();
try {
otl_connect
db;
db.rlogon( "Driver={Microsoft ODBC for
Oracle};Server=ZZZ;Uid=XXX;Pwd=YYY;" );
// db.set_max_long_size(?);
如果varchar_long长度非常长,超过默认值的话,你需要这一句
otl_stream o( 1, "{
:E = call
TEST( :A,:B,:C,:D o.set_commit(0);
int a =
1;
int b = 0;
int c = 2;
otl_long_string d(
"abc", 0, 3 );
otl_long_string e;
o << a << c
<< d;
o >> e >> b >>
c;
cout << "b = " << b <<
'\n';
cout << "c = " << c <<
'\n';
cout << "e = " << e.v <<
'\n';
//db.commit();
db.logoff();
}
catch(
otl_exception& p ) {
cerr << p.msg <<
"\n"
<< p.stm_text << "\n"
<<
p.sqlstate << "\n"
<< p.var_info <<
"\n"
<< endl;
}
}
说明:"{
:E = call
TEST( :A,:B,:C,:D"{ call
:Name1 := function( Name2 }"
也不是
"{ call
:Name1 \\:= function( Name2 }"
而是
"{
:Name1 = call function( Name2
}"
这一点和otl.sourceforge.net上的说明不一样。
阅读(3874) | 评论(18) | 转发(0) |