使用OTL操作Oracle数据库
一、编写代码
注:以下代码来自OTL示例
/* * otl_test.cpp * */ #include <iostream> using namespace std; #include <cstdio> #define OTL_ORA10G_R2 // Compile OTL 4.0/OCI10gR2 #include <otlv4.h> // include the OTL 4.0 header file otl_connect db; // connect object void insert() // insert rows into table { otl_stream o(50, // buffer size "insert into test_tab values(:f1<int>,:f2<char[31]>)", // SQL statement db // connect object ); o.set_commit(0); // turn off stream's "auto-commit" char tmp[32]; for (int i = 1; i <= 123; ++i) { sprintf(tmp, "Name%d", i); o << i << tmp; } o.flush(); // flush the stream's dirty buffer: // execute the INSERT for the rows // that are still in the stream buffer db.commit_nowait(); // commit with no wait (new feature of Oracle 10.2) } void select() { otl_stream i(50, // buffer size "select * from test_tab where f1>=:f<int> and f1<=:f*2", // SELECT statement db // connect object ); // create select stream float f1; char f2[31]; i << 8; // assigning :f = 8 // SELECT automatically executes when all input variables are // assigned. First portion of output rows is fetched to the buffer while (!i.eof()) { // while not end-of-data i >> f1 >> f2; cout << "f1=" << f1 << ", f2=" << f2 << endl; } i << 4; // assigning :f = 4 // SELECT automatically executes when all input variables are // assigned. First portion of output rows is fetched to the buffer while (!i.eof()) { // while not end-of-data i >> f1 >> f2; cout << "f1=" << f1 << ", f2=" << f2 << endl; } } int main() { otl_connect::otl_initialize(); // initialize OCI environment try { db.rlogon("xuanyuan/xuanyuan"); // connect to Oracle 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 number, f2 varchar2(30))"); // create table insert(); // insert records into table select(); // select records from 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.var_info << endl; // print out the variable that caused the error } db.logoff(); // disconnect from Oracle return 0; }
二、编译代码
g++ -o"otl_test" otl_test.cpp -lclntsh -I"$ORACLE_HOME/rdbms/public"
三、运行程序 otl_test
$ ./otl_test
结果如下:
f1=8, f2=Name8 f1=9, f2=Name9 f1=10, f2=Name10 f1=11, f2=Name11 f1=12, f2=Name12 f1=13, f2=Name13 f1=14, f2=Name14 f1=15, f2=Name15 f1=16, f2=Name16 f1=4, f2=Name4 f1=5, f2=Name5 f1=6, f2=Name6 f1=7, f2=Name7 f1=8, f2=Name8
四、关于OTL更多的信息
请访问OTL的主页:http://otl.sourceforge.net/