使用OTL进行数据库编程

简介:
操作环境:
1. 操作系统:Windows XP Professional with SP2。
2. 编程环境:Visual C++ 6.0 with SP6。
3. 数据库环境:Access 2003。
OTL简介:
OTL 是 Oracle, Odbc and DB2-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的方式来进行操纵。
在MS Windows and Unix 平台下,OTL目前支持的数据库版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI10g), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本为4.0,参见 http://otl.sourceforge.net/ ,下载地址 http://otl.sourceforge.net/otlv4_h.zip
优点:
      a. 跨平台
      b. 运行效率高,与C语言直接调用API相当
      c. 开发效率高,起码比ADO.net使用起来更简单,更简洁
      d. 部署容易,不需要ADO组件,不需要.net framework 等
缺点:
      a. 说明文档以及范例不足够丰富(暂时性的)
     其实现在它提供有377个使用范例可参考,下载地址: http://otl.sourceforge.net/otl4_examples.zip
建立数据源
1.依次点击“开始->控制面板”,打开“控制面板”界面,双击“管理工具”,然后再双击“数据源(ODBC)”,就打开了“ODBC数据源管理器”,选择“系统DSN”。
2.单击“添加”,弹出“创建新数据源”对话框,选择“Microsoft Access Driver(*.mdb)”。
3.点击“完成”,弹出“ODBC Microsoft Access安装”对话框,单击“创建”,开始创建数据库,弹出“新建数据库”对话框,添加数据库名称my_db和选择数据库存放目录,单击“确定”,创建完成,然后添加数据源名:my_db。点击“确定”。
4.然后在系统数据源中就有我们刚才添加的数据源。
5.单击“确定”,完成数据源的创建。
OTL编程
下面我们用一个实例来说明:
1. 创建数据表:TestTable ( ColumA int , ColumB varchar(50),ColumC varchar(50) )
2. 插入100条数据,ColumA 为数据的 id 范围:0-99 , ColumB=”Test Data %d” , 其中 %d=id 。
3. 删除表中ColumA 中小于10和大于90的数据。
4. 将ColumA为3的倍数的记录中ColumC更新为ColumB的内容。
具体代码为:
None.gif#include <iostream>
None.gif using  namespace std;
None.gif#include <stdio.h>
None.gif#include < string.h>
None.gif#include <stdlib.h>
None.gif #define OTL_ODBC  //  编译 OTL 4.0/ODBC
None.gif //  #define OTL_ODBC_UNIX  //  如果在Unix下使用UnixODBC,则需要这个宏
None.gif
#include "otlv4.h"  //  包含 OTL 4.0 头文件
None.gif
otl_connect db;  //  连接对象
None.gif
None.gif
// 此函数完成插入100条数据,ComulA为数据的id,范围为0-99,
None.gif
// ColumB="Test Data %d",其中%d=id
None.gif
void insert()  
None.gif //  向表中插入行
ExpandedBlockStart.gif

InBlock.gif// 打开一个通用的流,以模板的方式向表中插入多项数据
InBlock.gif
otl_stream
InBlock.gif  o(1, // 流的缓冲值必须设置为1
InBlock.gif
  "insert into TestTable values(:f1<int>,:f2<char[50]>,:f3<char[50]>)", 
InBlock.gif  // SQL 语句
InBlock.gif
  db  // 连接对象
InBlock.gif
  );
InBlock.gifchar tmp1[32];
InBlock.gifchar tmp2[30];
InBlock.gif
ExpandedSubBlockStart.giffor(int i=0;i<100;++i){
InBlock.gif  sprintf(tmp1,"Test Data %d",i);
InBlock.gif  sprintf(tmp2,"");
InBlock.gif  o<<i<<tmp1<<tmp2;
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif // 此函数完成删除表中ColumA中小于10和大于90的数据
None.gif
void delete_rows()
ExpandedBlockStart.gif
InBlock.giflong rpc=otl_cursor::direct_exec(db,"delete from TestTable where ColumA<10 or ColumA>90");
InBlock.gif// rpc是作用效果的返回值,otl_cursor::direct_exec为直接执行sql语句
InBlock.gif
cout<<"Rows deleted: "<<rpc<<endl;
ExpandedBlockEnd.gif}

None.gif
None.gif // 此函数完成将ColumA为3的倍数的记录中ColumC更新为ColumB的内容
None.gif
void update()
None.gif //  更新表
ExpandedBlockStart.gif
{
InBlock.gifotl_stream 
InBlock.gif  o(1, // 缓冲值
InBlock.gif
  "UPDATE TestTable "
InBlock.gif  "   SET ColumC=:f2<char[50]> "
InBlock.gif  " WHERE ColumA=:f1<int>", 
InBlock.gif        // UPDATE 语句
InBlock.gif
  db // 连接对象
InBlock.gif
  );
InBlock.gifotl_stream c(1,"select ColumB from TestTable where ColumA=:f3<int>",db);
InBlock.gifchar temp[10];
InBlock.giffor(int i=10;i<91;i++)
ExpandedSubBlockStart.gif{
InBlock.gif  if(i%3==0)
ExpandedSubBlockStart.gif  {
InBlock.gif   c << i;
InBlock.gif   c >> temp;
InBlock.gif   o << temp << i;
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif int main()
ExpandedBlockStart.gif {
InBlock.gifotl_connect::otl_initialize(); // 初始化 ODBC 环境
ExpandedSubBlockStart.gif
try{
InBlock.gif  
InBlock.gif  db.rlogon("UID=scott;PWD=tiger;DSN=my_db"); // 连接到 ODBC
InBlock.gif  
//或者使用下面的连接语句方式。 
InBlock.gif  
//  db.rlogon("scott/tiger@firebird"); // connect to ODBC, alternative format
InBlock.gif  
// of connect string 
InBlock.gif
  
InBlock.gif  otl_cursor::direct_exec
InBlock.gif   (
InBlock.gif   db,
InBlock.gif   "drop table TestTable",
InBlock.gif   otl_exception::disabled // disable OTL exceptions
InBlock.gif
   ); // drop table
InBlock.gif  
InBlock.gif  
//这里完成表的创建
InBlock.gif
  otl_cursor::direct_exec
InBlock.gif   (
InBlock.gif   db,
InBlock.gif   "create table TestTable(ColumA int, ColumB varchar(50),ColumC varchar(50))"
InBlock.gif   );  // create table
InBlock.gif
  
InBlock.gif  insert(); // insert records into the table
InBlock.gif  
//  update(10); // update records in the table
InBlock.gif
  delete_rows();
InBlock.gif  update();
InBlock.gif  
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedSubBlockStart.gifcatch(otl_exception& p)// intercept OTL exceptions
InBlock.gif
  cerr<<p.msg<<endl; // print out error message
InBlock.gif
  cerr<<p.stm_text<<endl; // print out SQL that caused the error
InBlock.gif
  cerr<<p.sqlstate<<endl; // print out SQLSTATE message
InBlock.gif
  cerr<<p.var_info<<endl; // print out the variable that caused the error
ExpandedSubBlockEnd.gif
}

InBlock.gif
InBlock.gifdb.logoff(); // disconnect from the database
InBlock.gif

InBlock.gifreturn 0;
InBlock.gif
ExpandedBlockEnd.gif}
目录
相关文章
|
2月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
13天前
|
存储 数据库 Python
python的对象数据库ZODB的使用(python3经典编程案例)
该文章介绍了如何使用Python的对象数据库ZODB来进行数据存储,包括ZODB的基本操作如创建数据库、存储和检索对象等,并提供了示例代码。
17 0
|
13天前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
28 0
|
2月前
|
存储 SQL 数据库
|
2月前
|
SQL 数据库 索引
SQL 编程最佳实践简直太牛啦!带你编写高效又可维护的 SQL 代码,轻松应对数据库挑战!
【8月更文挑战第31天】在SQL编程中,高效与可维护的代码至关重要,不仅能提升数据库性能,还降低维护成本。本文通过案例分析探讨SQL最佳实践:避免全表扫描,利用索引加速查询;合理使用JOIN,避免性能问题;避免使用`SELECT *`,减少不必要的数据传输;使用`COMMIT`和`ROLLBACK`确保事务一致性;添加注释提高代码可读性。遵循这些实践,不仅提升性能,还便于后期维护和扩展。应根据具体情况选择合适方法并持续优化SQL代码。
28 0
|
2月前
|
存储 SQL 数据库
【计算机三级数据库技术】第8章 数据库后台编程技术--附思维导图
本文介绍了数据库后台编程的关键技术,包括存储过程、用户定义函数、触发器和游标,并附有思维导图。
19 1
|
2月前
|
SQL 关系型数据库 MySQL
"Python与MySQL的浪漫邂逅:一键掌握增删改查,开启你的数据库编程之旅!"
【8月更文挑战第21天】Python因其简洁的语法和强大的库支持,成为连接数据库的首选工具。本文介绍如何使用Python连接MySQL数据库并执行基本操作。首先需安装`mysql-connector-python`库。通过配置连接信息建立数据库连接后,可利用`cursor.execute()`执行SQL语句进行数据的增删改查,并通过`commit()`提交更改。查询时使用`fetchall()`或`fetchone()`获取结果。记得处理异常及关闭连接以释放资源。掌握这些基础,有助于高效进行数据库编程。
32 0
|
4月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
64 3
|
3月前
|
数据库管理 Python
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
|
4月前
|
SQL Java 关系型数据库
Java数据库编程的详细介绍
Java数据库编程的详细介绍
32 1
下一篇
无影云桌面