OTL介绍

OTL是一个纯C++开发的通用数据库连接模板,它支持时下流行的大多数数据库,例如:Oracle、Mysql、PostgreSql、Sybase、Sqllite、MS ACCESS、Firebird等。并且它有跨平台的特性,使用起来也非常简单,在Windows、Linux、MacOS上都可以使用。

OTL使用

下载地址:
http://otl.sourceforge.net/

OTL使用:
otl使用简单,只有一个头文件otlxxx.h,通常我们在使用的时候只需要在项目头文件中包含:#include <otlxxx.h>。

otl是根据宏定义来判断使用的是什么数据库驱动处理数据,例如我们需要连接的是postgepSql时,需要使用宏定义:
OTL_ODBC_POSTGRESQL或是OTL_ODBC(ODBC 为异构数据库访问提供统一接口)。

相关宏定义的列表在下面网页中可以查询到:
http://otl.sourceforge.net/otl3_compile.htm

--
- otl使用案例
--#include <otlv4.h>--定义一个连接数据库的连接实例,一个实例可以处理多个事务
otl_connect c; int main(){--初始化连接otl_connect::otl_initialize();try{--- 建立连接,str_login具体看需要连接的数据库是什么,例如postgrepsql,user/pass@dsn- 开启自动提交,在otl头文件中的otl_connect类中可以看到连接可以设置的功能--c.rlogon("str_login");c.auto_commit_on();-- 执行方式1,直接使用函数执行sql语句(通常用于DDL)otl_cursor::direct_exec(c, "str_sql");-- 执行方式2,使用流的方式(通常用于DML)otl_stream s; -- 使用open,或者是构造函数生成流,参考c++文件流s.open(bufsize, str_sql, c); -- bufsize表示缓存多少条数据后执行操作(类似缓冲区)s << idate -- 若为insert,插入数据s >> odate -- 若为select,读取数据}catch(otl_exception& e){--处理异常}-- 断开连接c.logoff();}

关于OTL封装中遇到的问题

封装OTL的思路

(1)建立多条与数据库的连接otl_connect ,并根据需要,将连接信息和连接的句柄封装到数据结构中(存放单条连接);
(2)使用连接管理器管理封装好的连接;
(3)Sql操作通过流的方式来使用连接
(4)每次执行sql语句时,首先是从现有的连接中找,有,从现有连接中拿一条,替换流;没有即添加,如果添加连接数量超过最大值,等待已有连接运行结束。

使用封装遇到的问题(缓冲区问题)

  • 问题场景
    在插入数据时,一般会采用批量插入的方式,例如一次性插入5000条。

  • 问题接口
    sql的操作语句是使用连接中的流来执行,接口为:
    otl_stream::open(bufsize/插入数量/, str_sql, connect);
    这是一个重载的函数,有很多种调用方式,具体可以参考otlvxx.h

  • 问题原因
    当流插入数据时,如果我们需要插入4000条,但是在插入1000时出现了异常,那么后面的3000条数据会因为抛出异常而被忽略,因此,需要在异常中处理,将后面的数据继续入库(或是遇到异常,即将后面数据重新插入);
    但是如果我们的数据不满足open时的bufsize,流是不会刷新(插入不会执行),只有等到该流被关闭时(析构)才会执行,而此时已经无法将析构中的异常抛出,导致出现异常后的数据无法入库。

  • 解决方式
    otl_stream::flush();

ODBC配置DSN

在otl的连接函数rlogon中需要填写连接参数字符串,使用odbc连接时该字符串的格式一般为(以linux下通过odbc连接PostgreSql数据库为例):
user/passwd@dsn

除此之外,在服务器上配置odbc的sdn也是必须的。

例如,linux配置odbc连接postgresql数据库:
(1)在linux中下载,并安装unixODBC,安装完成后可以通过odbc_config --version查看odbc的版本,使用odbc_config --odbcini可以查看配置文件的路径;

(2)打开配置文件odbc.ini,填写数据源相关配置,例如:

[PGDB] #dsn名称
Description         = Test to Postgres
Driver              = PostgreSQL Unicode  #驱动名称
Trace               = Yes
TraceFile           = sql.log
Database            = xxx #数据库名称
Servername          = 127.0.0.1
UserName            = tttt  #用户名称
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
MaxVarcharSize                  = 8096

(3)打开odbc驱动配置文件odbcinst.ini,填写驱动配置,例如:

[PostgreSQL Unicode ]#驱动名称
Description     = ODBC for PostgreSQL
Driver          = /usr/lib/psqlodbcw.so  #pg数据库驱动库文件
Setup           = /usr/lib/libodbcpsqlS.so
Driver64        = /usr/lib64/psqlodbcw.so
Setup64         = /usr/lib64/libodbcpsqlS.so
FileUsage       = 1
Threading   = 0

(4)配置完成后,可用isql -v xxx(库名)连接测试;
(5)使用otl连接测试。

注意:其他数据库,例如mysql,修改odbc配置即可

OTL:通用数据库连接模板相关推荐

  1. C++类库:OTL通用的数据库连接类库

    From: http://www.cppblog.com/lovefeel2004/archive/2010/06/02/116946.aspx OTL是一个纯C++的通用数据库连接模板库,可以支持各 ...

  2. 工作日报模板_千份财会人通用工作模板:自动核算工资、财务分析报表等等

    财务人的日常工作中,最不可或缺的就是各种表格,比如:工资表.成本核算表以及各种财务分析报表,总是会感到无从下手.而且,就财务分析报表而言,即是公司年度会议上需要重量级展示的,更是BOSS最为关心的存在 ...

  3. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

    文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的"mvc框架". 一.设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 ...

  4. WPF通用窗体模板【2】

    2019独角兽企业重金招聘Python工程师标准>>> 接上一篇的通用窗体模板,这个模板是重写窗体样式的自定义模板,与上篇不同的是它将窗体的一些基本功能全部清空(放大.缩小.关闭按钮 ...

  5. 通用Makefile模板

    #################################################################################################### ...

  6. PPT模板 | 湖南农业大学汇报通用PPT模板

    分享一批自制的论文答辩的PPT模板! 质量都很高,而且框架内容完整,全部可修改,整体为30页+,支持一键换色.一键换字体. 这份论文答辩PPT模板提供了全面的汇报场景,方便使用.所有元素100%可编辑 ...

  7. 2021黑金牛气冲天新年快乐通用PPT模板

    本作品内容为2021黑金牛气冲天新年快乐通用PPT模板, 格式为 pptx, 大小93 MB, 页数为28,比例16:9,请使用软件PowerPoint打开, 作品中文字及图均可以修改和编辑,图片更改 ...

  8. 创意简约唯美小清新感恩节蓝色通用PPT模板

    本作品内容为创意简约唯美小清新感恩节蓝色通用PPT模板, 格式为 pptx, 大小28 MB, 页数为23,比例16:9, 请使用软件PowerPoint(2016)打开, 作品中文字及图均可以修改和 ...

  9. 创意简约中国风新年快乐牛年大吉通用PPT模板

    本作品内容为创意简约中国风新年快乐牛年大吉通用PPT模板, 格式为 pptx, 大小21 MB, 页数为22,比例16:9, 请使用软件PowerPoint(2016)打开, 作品中文字及图均可以修改 ...

  10. 教师公开课卡通动态通用PPT模板

    模板介绍 本套教师公开课卡通动态通用PPT模板,模板编号:P46182,大小10MB,共27页,比例为16:9,由封面.目录.转场页.内容.结尾5个部分构成. 内含橙色,灰色多种配色,精美卡通风格设计 ...

最新文章

  1. 实现一个简单的投票功能
  2. 清华官宣:前百度总裁张亚勤正式加盟清华大学
  3. 职工工资信息系统 c语言题,谁能帮我解决关于C语言的一些题?
  4. 医院选址问题--数据结构课程设计
  5. 2017计算机在线作业二,《计算机应用基础》2017年秋学期在线作业(二)满分答案...
  6. Android 程序启动界面Demo
  7. Mysql服务器线上配置主从同步
  8. python查看程序运行时间
  9. springmvc结合freemarker,非自定义标签
  10. 一句Python,一句R︱数据的合并、分组、排序、翻转、集合
  11. SpreadJS V14.2.0 放假前Crack
  12. 哈夫曼编码问题(贪心算法)
  13. jquery timepicker
  14. 问题与解决_IDEA-> Project Structure -> Artifacts-> ‘项目名‘ module: ‘Web‘ facet resources 显示红色
  15. ChatGPT爆火出圈,高质量文本标注数据成关键
  16. 直播回顾|论道原生:云原生时代的中间件
  17. ac9560不支持承载_WiFi打游戏总卡?英特尔AC9560无线网卡了解一下
  18. Oracle数据库(索引、视图、伪列与伪表)
  19. Android 图片处理工具类封装2
  20. TDS协议和FreeTDS开源实现

热门文章

  1. mysql 计算农历_SQL农历转换函数
  2. 菜鸟渗透日记35---python渗透测试编程之身份认证攻击1-密码字典
  3. 看英语书记录的单词-5
  4. 永别了,91网站!宣布永久关闭
  5. ffmpeg水平翻转视频,附批量处理脚本
  6. 计算机学报2020.1-2022.5感兴趣论文简单通览笔记
  7. hdu-4565(矩阵快速幂+推导)
  8. HP LaserJet Pro MFP M227d安装指南
  9. Rayson API 框架分析系列之5: NIO实现原理
  10. 2020-2022年最全各省、市矢量和栅格数据(土地利用、植被覆盖、土壤类型、人口密度、NPP、气象水文数据、路网、省市县乡镇区划边界、poi数据、河流水系、建筑轮廓)