Otl简介

OTL 是 Oracle,Odbc andDB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle,MS SQL Server,Sybase,Informix,MySQL,DB2,Interbase /Firebird,PostgreSQL,SQLite,SAP/DB,TimesTen,MS ACCESS等等。OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。

Myodbc

因为otl只能通过odbc连接mysql,所以首先需要安装myodbc,myodbc官网下载地址:http://www.mysql.com/downloads/connector/odbc/,根据自己的电脑下载,我下载的是

Connector/ODBC5.1.10,Windows (x86, 32-bit), MSI Installer Connector-ODBC,然后安装即可,点击默认安装就行了。

添加数据源

打开控制面板-》点击管理工具-》点击数据源,然后添加数据源

打开ODBC数据源管理器对话框,如下图所示:

1.  打开ODBC数据源管理器。(注:在64位系统中装32的mysql和odbc,启动C:\Windows\SysWOW64\odbcad32.exe)

2.在ODBC数据源管理器对话框中,点击“添加”。打开“创建新数据源”对话框。

3.选择MySQL ODBC 5.1驱动程序,然后点击“完成”。打开“MySQLODBC 5.1驱动程序-DSN配置”对话框,如下图所示:

4.在“数据源名”框中,输入打算访问的数据源的名称。它可以是你选择的任何有效名称。

5.在“描述”框中,输入DSn所需的描述信息。

6.在“主机”或“服务器名”(或IP)框中,输入准备访问的MySQL服务器主机的名称。默认情况下为localhost(本地主机)。

7.在“数据库名”框中,输入准备用作默认数据库的MySQL数据库名称。

8.在“用户”框中,输入你的MySQL用户名(数据库用户ID)。

9.在“密码”框中输入密码。

10.在“端口”框中,如果端口不是默认端口,输入端口号。

11.选择一个数据库吧

点击ok,添加数据源完毕。

12.修改字符集名称,否则会出现乱码

下载otl

下载头文件即可。

测试一下

当然首先要把otl头文件拷贝到工程目录,链接的时候要用,下面是一个简单的测试代码,如果刚才选择了一个数据库的话,就在当前的数据库中添加了一个表;

#include

using namespace std;

#include

#define OTL_ODBC // CompileOTL 4.0/ODBC

// Thefollowing #define is required with MyODBC 5.1 and higher

#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE

#define OTL_UNICODE // CompileOTL with Unicode

#include "otlv4.h"// include the OTL 4.0 header file

otl_connect db; // connect object

void insert()

// insert rowsinto table

{

otl_stream o(1, //buffer size should be == 1 always on INSERT.

"insertinto test_tab values(:f1,:f2)",

// SQLstatement, char[5] means 5 2-byte

// Unicodecharatcters including a null

// terminator

db // connectobject

);

unsigned short tmp[32]; // Nullterminated Unicode character array.

for(int i=1;i<=100;++i){

o<

tmp[0]=1111; //Unicode character (decimal code of 1111)

tmp[1]=2222; //Unicode character (decimal code of 2222)

tmp[2]=3333; //Unicode chracater (decimal code of 3333)

tmp[3]=4444; //Unicode chracater (decimal code of 4444)

tmp[4]=0; //Unicode null terminator

o<

// overloadedoperator<

// OTL acceptsa pointer to a Unicode character array.

//operator<

// in order toavoid ambiguity in C++ type casting.

}

}

void select()

{

otl_stream i(50, //buffer size

"select* from test_tab "

"wheref1>=:f11 "

" and f1<=:f12*2",

// SELECTstatement

db // connectobject

);

// create selectstream

int f1;

unsigned short f2[32];

i<<8<<8; // assigning :f11 = 8, f12 = 8

// SELECTautomatically executes when all input variables are

// assigned. Firstportion of output rows is fetched to the buffer

while(!i.eof()){// while not end-of-data

i>>f1;

i>>(unsignedchar*)f2;

// overloaded operator>>(unsignedchar*) in the case of Unicode

// OTL acceptsa pointer to a Unicode chracter array.

//operator>>(unsigned short*) wasn't overloaded

// in order toavoid ambiguity in C++ type casting.

cout<

for(int j=0;f2[j]!=0;++j)

cout<

cout<

}

i<<4<<4; // assigning :f11 = 4, :f12 = 4

// SELECTautomatically executes when all input variables are

// assigned. Firstportion of output rows is fetched to the buffer

while(!i.eof()){// while not end-of-data

i>>f1>>(unsigned char*)f2;

cout<

for(int j=0;f2[j]!=0;++j)

cout<

cout<

}

}

int main()

{

otl_connect::otl_initialize(); // initialize the database API environment

try{

db.rlogon("root/root@myodbc5");// connect to the database

otl_cursor::direct_exec

(

db,

"droptable test_tab",

otl_exception::disabled // disable OTL exceptions

); // droptable

otl_cursor::direct_exec

(

db,

"createtable test_tab(f1 int, f2 varchar(11))"

); // create table

insert(); //insert records into table

select(); //select records from table

}

catch(otl_exception&p){ // intercept OTL exceptions

cerr<

cerr<

cerr<

}

db.logoff(); //disconnect from the database

getchar();

return 0;

}

要注意的是更改db.rlogon("root/root@myodbc5");// connect to the database

其中的数据库的用户名和密码,还有数据源的名称。

运行的结果

f1=8, f2= 1111 2222 3333 4444 f1=9, f2= 1111 2222 3333 4444 f1=10, f2= 1111 2222 3333 4444 f1=11, f2= 1111 2222 3333 4444 f1=12, f2= 1111 2222 3333 4444 f1=13, f2= 1111 2222 3333 4444 f1=14, f2= 1111 2222 3333 4444 f1=15, f2= 1111 2222 3333 4444 f1=16, f2= 1111 2222 3333 4444 f1=4, f2= 1111 2222 3333 4444 f1=5, f2= 1111 2222 3333 4444 f1=6, f2= 1111 2222 3333 4444 f1=7, f2= 1111 2222 3333 4444 f1=8, f2= 1111 2222 3333 4444

otl连接mysql_otl通过myodbc连接mysql相关推荐

  1. MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)

    本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...

  2. 网页如何与mysql服务器建立连接不上,html与mysql建立连接数据库

    html与mysql建立连接数据库 内容精选 换一换 云数据库 GaussDB(for MySQL)是华为云提供的一款安全.可信的数据库服务.GaussDB(for MySQL)秉承华为云对租户的安全 ...

  3. php mysql 连接不上_PHP: 连接状态 - Manual

    连接状态 插件改变了 PHP MySQL 连接的控制,新建连接会从一个连接池中获取,用于替代 client-server 的单一连接方式.连接池包含一组 master 连接,和可选数目的 slave ...

  4. PHP与MySQL连接菜鸟教程_PHP 连接 MySQL - PHP 教程 - 菜鸟学堂-脚本之家

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...

  5. mysql内连接和外连接的区别_Swoole4创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  6. Tableau如何连接其他电脑上的mysql数据库

    在别的电脑上用Tableau,如何连接到自己电脑的mysql 数据库, 服务器名.用户名和密码该如何填 首先,需要在mysql中创建一个允许远程连接的账户,例如 mysql> grant all ...

  7. mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接

    一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...

  8. mysql连接池失效_连接池隔天失效之异常处理

    一.    开发环境     测试平台:Linux     开发工具:Eclipse 3.x     搭配环境:Struts2.x / Ibatis 2.0 / MySql / Tomcat6. ...

  9. MySQL连接问题【如何解决MySQL连接超时关闭】

    --MySQL连接问题[如何解决MySQL连接超时关闭] ------------------------------------------------转载 最近做网站有一个站要用到WEB网页采集器 ...

  10. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

最新文章

  1. 实时动态测量技术的不足与改进方法
  2. 使用SVN提示“工作副本已经锁定”的解决办法
  3. MFC非模态对话框实例
  4. js 中对于 css 的变量操作(React也可)
  5. 使用junit+mockito进行mock测试实例
  6. uboot的目录分析
  7. vscode 导入python库_vscode 如何导入python库
  8. 不连续曲线 highcharts_什么是正则曲线和正则曲面
  9. C/C++代码调试:快速定位内存的申请和释放的位置
  10. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结
  11. 有生成的日志的监控电脑性能的软件吗_全链路监控:方案概述与对比,看完你就懂...
  12. python管理工具ports_采用python flask 开发如何管理 host port
  13. 汇编语言典型例子详解_汇编语言常见例子
  14. 利用MATLAB进行符号运算。
  15. LTM(Lifelong Topic Modeling)介绍
  16. 基因数据处理12之samtool的tview来查看sam的匹配文件
  17. Android触摸屏突然没反应了
  18. 基于Tushare的上证综指行情分析与影响其涨跌的因素(以美债为例)
  19. 安徽大学计算机科学与技术学院施俊,上海大学教授施俊应邀来我院做学术报告...
  20. google翻译的用法 使用translate.google.com翻译整个网页内容

热门文章

  1. 如何制定切实可行的计划并好好执行——2020年,我不想再碌碌无为
  2. flink集成springboot案例_集成-Apache Flink+Spring Boot
  3. html svg 线条动画,线条之美,玩转 SVG 线条动画
  4. creo绘图属性模板_creo绘图属性
  5. 2020年个人所得税计算方法(附带计算器)
  6. 通州区机器人比赛活动总结_机器人大赛赛后总结
  7. 谷歌浏览器如何设置internet选项
  8. ”此网站尚未经过身份验证“问题的解决办法
  9. windows 大容量存储设备驱动异常(代码:39)U盘由于驱动问题无法用的解决方法
  10. mysql设置不区分大小写_更改MYSQL数据库不区分大小写表名