使用OTL操作MySQL数据库-程序员宅基地

技术标签: 数据库  c/c++  

使用OTL操作MySQL数据库

一、编写代码

注:以下代码来自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 o(1, // 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 o2(1, // 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) {
        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 "
                " WHERE f1=:f1",
            // 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 "
                "  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
        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=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/

Linux下C/C++、ACE、Boost、高性能服务器端应用

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28949713/viewspace-774929/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28949713/viewspace-774929/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cuiyuanliao3934/article/details/100493810

智能推荐

UGUI_PointerEventData()__检测鼠标点击的位置上,所包含的全部UI控件_ugui 实现鼠标一直在某个image中的不同位置 pointereventdata-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏6次。需求:有时候拖动/点击UI时,需要判断鼠标所在位置上,对重叠的UI进行分别的处理实现:利用PointerEventData() 一;判断当前鼠标上重叠的UI有多少个 private int IsPointerOverUIObject() { PointerEventData eventDataCurrentPosition = new Pointer..._ugui 实现鼠标一直在某个image中的不同位置 pointereventdata

chrome全屏模式书签栏/工具栏消失如何处理_chrome 全屏没有tab-程序员宅基地

文章浏览阅读2.6w次,点赞19次,收藏4次。chrome全屏模式书签栏/工具栏消失如何处理最上方的‘视图’--‘在全屏模式下始终显示工具栏'切换全屏模式快捷键:control+command+f 快捷键全屏模式下显示工具栏快捷键:shift+command+f 快捷键..._chrome 全屏没有tab

编译scratch3.0桌面程序(根据原创进行了一点修改)_scratch编译-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏31次。编译scratch3.0桌面程序1.首先操作系统是win10;2.安装好node.js,yarn,git;3.在github上下载scratch-gui和scratch-desktop的源代码,不需要用git clone的方式(下载全部源代码,太繁琐),直接下载zip压缩包即可;4.解压下载的文件5.首先cmd 进入scratch-gui-develop,依次运行如下命令npm ..._scratch编译

用NetBeans开发J2ME游戏实例讲解(一)_netbeans开发实例-程序员宅基地

文章浏览阅读1.2k次。作者:林刚 文章来源:http://blogs.sun.com/lirincy 最近在网上看到一篇关于华容道的J2ME的开发实例,花了一天时间,在NetBeans上实现了,并且进行了改进和增强,现将经验共享出来,部分代码属原作者所有,在附录中。 1. 必须先安装 NetBeans IDE 4.0 和 NetBeans Mobility Pack 4.0,然后才能开始进行 J2ME MIDP 开发。_netbeans开发实例

百度语音识别[python]_python greatxiang-程序员宅基地

文章浏览阅读1.3k次。一首先上 百度AI平台 申请账号,和开通语音识别模块。这个比较简单,不细说。你可以得到三个东西:AppIDAPI KeySecret Key并新建一个my_password.txt,按上述格式粘贴进去。(防止把密码明文直接写到代码中)二打开cmd命令行窗口,输入 pip install baidu-aip ,安装相关依赖。三新建ai.py,粘贴以下代码:将待转换音频复制到..._python greatxiang

一个VC爱好者的入门之路-程序员宅基地

文章浏览阅读1.4k次。 看到那些对VC不知从何下手而苦苦挣扎的朋友,希望我的学习之路能给他们一下借鉴。学VC并不是传说的那么难,可不下些功夫是学不成的。学编程急不得,没有编程的基础知识上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话还能挺过来,但最后还得回头来补习基础知识。意志不坚强的话,很有可能就此放弃,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,学VC很简单。_vc爱好者

随便推点

基于FPGA的FFT设计_fpga fft-程序员宅基地

文章浏览阅读8.1k次,点赞10次,收藏120次。一、前言。频域,更利于分析信号的成分,如:基波、谐波。在示波器、频谱仪中,经常用到频谱图。DFT和FFT都是时域变换到频域的工具,DFT适用于任意点数,而FFT一般是偶数点(基2、基4、分裂基等)而且速度更快。二、方案。由于FFT是统一处理若干个点,也就是若干个数据,所以先把数据缓存起来,计算好再输出。这里使用了两块RAM做输入、输出缓存器。蝶型运算主要由复数乘法器和复数加/减法器构成,其中复数乘法器可以由3个实数乘法器实现。旋转因子可以先扩大再存入ROM中,计算完成后._fpga fft

怎么操作以kudu为引擎的hive数据库,使用IMPALA方式操作_通过impala 访问 kudu-程序员宅基地

文章浏览阅读1.9k次。KUDU引擎的HIVE数据库KUDU引擎的HIVE数据库到底什么是kudu引擎的hive数据库呢?kudu引擎的好处怎么使用IMPALA操作kudu引擎的数据库呢首先了解原理实操impala语句kudu中建立表TEST1kudu的TEST1映射到impala(hive)中KUDU引擎的HIVE数据库到底什么是kudu引擎的hive数据库呢?首先KUDU只是引擎,不是一个库,其实本质的数据还是hive数据库。原本的HIVE引擎是mr、tez、spark,那么现在改了,改成了kudu引擎。kudu引擎_通过impala 访问 kudu

Pandas+Pyecharts | 招聘信息数据可视化_仿照例子,分析positions.csv中的数据,画出最低薪资分布的柱状图,要求:在柱体上方-程序员宅基地

文章浏览阅读3.5k次,点赞6次,收藏90次。本期我们通过分析某招聘网站发布的python相关工作招聘信息数据,进行以下几个方面的分析:全国哪些城市岗位数量比较多、哪些公司薪资待遇比较好、哪些岗位需求量比较大、普遍工资分布情况等等_仿照例子,分析positions.csv中的数据,画出最低薪资分布的柱状图,要求:在柱体上方

CSS3原生实现淡入淡出效果_css3 visible 淡入淡出-程序员宅基地

文章浏览阅读3.1w次。淡入淡出效果 #targetDiv { width: 150px; height:200px; text-align:center; padding-top:80px; background: #8a8a8a; color: #fff; positio_css3 visible 淡入淡出

ES6的对象新增的方法_es6往对象添加字段-程序员宅基地

文章浏览阅读3.3k次。Object.is() 严格比较两个值是否相等ES5 比较两个值是否相等,只有两个运算符:相等运算符()和严格相等运算符(=)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等.不同:一是+0不等于-0,二是NaN等于自身。Obejct.assign() 对象合并Object..._es6往对象添加字段

ubuntu 下opencv卸载_ubuntu怎么opencv卸没卸载干净-程序员宅基地

文章浏览阅读1.2k次。回到opencv编译的位置,也就是build文件下执行下面指令! sudo make uninstall cd .. sudo rm -r build rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/open_ubuntu怎么opencv卸没卸载干净