宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

首先重点推荐介绍otl介绍及用法的文章:http://www.cnblogs.com/fnlingnzb-learner/p/5835560.html

一、编写代码
注:以下代码来自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 o1, // 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 o21, // 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) {
        sprintftmp, "Name%d", i);
        o << i << tmp;
    }
    for i = 101; i <= 103; ++i) {
        sprintftmp, "Name%d", i);
        o2 << i << tmp;
    }
}

void updateconst int af1)
// insert rows into table
{
    otl_stream o1, // 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 selectconst int af1) {
    otl_stream i50, // 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
//其中dsn是odbc连接的名字,不是数据库的名字,otl是通过odbc的名字找到数据库的,  
//而这个名字对于的配置里面,已经包含了IP,端口等信息,只要你提供用户名和密码就可以访问了  
        //http://jingyan.baidu.com/article/8065f87f38b31423312498e4.html  
  db.rlogon"xuanyuan/xuanyuan@examples"); // connect to ODBC, alternative format of connect string otl_cursor::direct_execdb, "use examples"); // 此行在原示例代码中没有,必须使用use xxx切换数据库 otl_cursor::direct_execdb, "drop table test_tab", otl_exception::disabled // disable OTL exceptions ); // drop table otl_cursor::direct_execdb, "create table test_tabf1 int, f2 varchar30)) type=innoDB"); // create table insert); // insert records into the table update10); // update records in the table select8); // 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