C++07:使用OTL操作MySQL資料庫

來源:互聯網
上載者:User

C++07:使用OTL操作MySQL資料庫

C++07:使用OTL操作MySQL資料庫 

2009-10-29 14:46 一、編寫代碼

註:以下代碼來自OTL樣本,略有改動

#include <iostream>using namespace std;#include <cstdio>#include <cstring>#include <cstdlib>#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 <otlv4.h> // include the OTL 4.0 header fileotl_connect db; // connect objectvoid insert()// insert rows into table{    otl_stream o(1, // buffer size should be == 1 always on INSERT            "insert into test_tab values "                " (:f1<int>,:f2<char[31]>), "                " (:f12<int>,:f22<char[31]>), "                " (:f13<int>,:f23<char[31]>), "                " (:f14<int>,:f24<char[31]>), "                " (:f15<int>,:f25<char[31]>) ",            // 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<int>,:f2<char[31]>)", 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<char[31]> "                " WHERE f1=:f1<int>",            // 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<int> "                "  and f1<=:f12<int>*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=Name8f1=9, f2=Name9f1=10, f2=Name changedf1=11, f2=NULLf1=12, f2=Name12f1=13, f2=Name13f1=14, f2=Name14f1=15, f2=Name15f1=16, f2=Name16
四、關於OTL更多的資訊

請訪問OTL的首頁:http://otl.sourceforge.net/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.