usingnamespacestd;#include#include#include#defineOTL_ODBC//CompileOTL4.0/ODBC//Thefollowing#defineisrequi" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

C++07:使用OTL操作MySQL數(shù)據(jù)庫

系統(tǒng) 2942 0

C++07:使用OTL操作MySQL數(shù)據(jù)庫

C++07:使用OTL操作MySQL數(shù)據(jù)庫

一、編寫代碼

注:以下代碼來自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 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<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切換數(shù)據(jù)庫
        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
    

結(jié)果如下:

      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更多的信息

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

C++07:使用OTL操作MySQL數(shù)據(jù)庫


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 哈尔滨市| 临澧县| 衡阳市| 晋城| 铜山县| 长宁区| 阿坝县| 中超| 桦甸市| 东乡县| 云梦县| 渝北区| 襄樊市| 田阳县| 商城县| 瑞昌市| 枣强县| 乌拉特前旗| 喜德县| 瑞丽市| 井研县| 南靖县| 民丰县| 兴业县| 修武县| 定结县| 通州市| 清镇市| 弥勒县| 沧源| 沂水县| 江北区| 天峨县| 鄱阳县| 巩义市| 通许县| 津南区| 墨竹工卡县| 麦盖提县| 贵南县| 南江县|