天天看點

使用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的方式來進行操縱。

優點:

      a. 跨平台

      b. 運作效率高,與C語言直接調用API相當

      c. 開發效率高,起碼比ADO.net使用起來更簡單,更簡潔

      d. 部署容易,不需要ADO元件,不需要.net framework 等

缺點:

      a. 說明文檔以及範例不足夠豐富(暫時性的)

建立資料源

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的内容。

具體代碼為:

使用OTL進行資料庫程式設計

#include <iostream>

使用OTL進行資料庫程式設計

using namespace std;

使用OTL進行資料庫程式設計

#include <stdio.h>

使用OTL進行資料庫程式設計

#include <string.h>

使用OTL進行資料庫程式設計

#include <stdlib.h>

使用OTL進行資料庫程式設計

#define OTL_ODBC // 編譯 OTL 4.0/ODBC

使用OTL進行資料庫程式設計

// #define OTL_ODBC_UNIX // 如果在Unix下使用UnixODBC,則需要這個宏

使用OTL進行資料庫程式設計

#include "otlv4.h" // 包含 OTL 4.0 頭檔案

使用OTL進行資料庫程式設計

otl_connect db; // 連接配接對象

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

//此函數完成插入100條資料,ComulA為資料的id,範圍為0-99,

使用OTL進行資料庫程式設計

//ColumB="Test Data %d",其中%d=id

使用OTL進行資料庫程式設計

void insert()  

使用OTL進行資料庫程式設計

// 向表中插入行

使用OTL進行資料庫程式設計

使用OTL進行資料庫程式設計

// 打開一個通用的流,以模闆的方式向表中插入多項資料

使用OTL進行資料庫程式設計

otl_stream

使用OTL進行資料庫程式設計

  o(1, // 流的緩沖值必須設定為1

使用OTL進行資料庫程式設計

  "insert into TestTable values(:f1<int>,:f2<char[50]>,:f3<char[50]>)", 

使用OTL進行資料庫程式設計

  // SQL 語句

使用OTL進行資料庫程式設計

  db  // 連接配接對象

使用OTL進行資料庫程式設計

  );

使用OTL進行資料庫程式設計

char tmp1[32];

使用OTL進行資料庫程式設計

char tmp2[30];

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

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

使用OTL進行資料庫程式設計

  sprintf(tmp1,"Test Data %d",i);

使用OTL進行資料庫程式設計

  sprintf(tmp2,"");

使用OTL進行資料庫程式設計

  o<<i<<tmp1<<tmp2;

使用OTL進行資料庫程式設計

}

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

//此函數完成删除表中ColumA中小于10和大于90的資料

使用OTL進行資料庫程式設計

void delete_rows()

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

long rpc=otl_cursor::direct_exec(db,"delete from TestTable where ColumA<10 or ColumA>90");

使用OTL進行資料庫程式設計

// rpc是作用效果的傳回值,otl_cursor::direct_exec為直接執行sql語句

使用OTL進行資料庫程式設計

cout<<"Rows deleted: "<<rpc<<endl;

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

//此函數完成将ColumA為3的倍數的記錄中ColumC更新為ColumB的内容

使用OTL進行資料庫程式設計

void update()

使用OTL進行資料庫程式設計

// 更新表

使用OTL進行資料庫程式設計

{

使用OTL進行資料庫程式設計

otl_stream 

使用OTL進行資料庫程式設計

  o(1, // 緩沖值

使用OTL進行資料庫程式設計

  "UPDATE TestTable "

使用OTL進行資料庫程式設計

  "   SET ColumC=:f2<char[50]> "

使用OTL進行資料庫程式設計

  " WHERE ColumA=:f1<int>", 

使用OTL進行資料庫程式設計

        // UPDATE 語句

使用OTL進行資料庫程式設計

  db // 連接配接對象

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

otl_stream c(1,"select ColumB from TestTable where ColumA=:f3<int>",db);

使用OTL進行資料庫程式設計

char temp[10];

使用OTL進行資料庫程式設計

for(int i=10;i<91;i++)

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

  if(i%3==0)

使用OTL進行資料庫程式設計

  {

使用OTL進行資料庫程式設計

   c << i;

使用OTL進行資料庫程式設計

   c >> temp;

使用OTL進行資料庫程式設計

   o << temp << i;

使用OTL進行資料庫程式設計

  }

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

int main()

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

otl_connect::otl_initialize(); // 初始化 ODBC 環境

使用OTL進行資料庫程式設計

try{

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

  db.rlogon("UID=scott;PWD=tiger;DSN=my_db"); // 連接配接到 ODBC

使用OTL進行資料庫程式設計

  //或者使用下面的連接配接語句方式。 

使用OTL進行資料庫程式設計

  //  db.rlogon("scott/tiger@firebird"); // connect to ODBC, alternative format

使用OTL進行資料庫程式設計

  // of connect string 

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

  otl_cursor::direct_exec

使用OTL進行資料庫程式設計

   (

使用OTL進行資料庫程式設計

   db,

使用OTL進行資料庫程式設計

   "drop table TestTable",

使用OTL進行資料庫程式設計

   otl_exception::disabled // disable OTL exceptions

使用OTL進行資料庫程式設計

   ); // drop table

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

  //這裡完成表的建立

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

   "create table TestTable(ColumA int, ColumB varchar(50),ColumC varchar(50))"

使用OTL進行資料庫程式設計

   );  // create table

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

  insert(); // insert records into the table

使用OTL進行資料庫程式設計

  //  update(10); // update records in the table

使用OTL進行資料庫程式設計

  delete_rows();

使用OTL進行資料庫程式設計

  update();

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

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

使用OTL進行資料庫程式設計

  cerr<<p.msg<<endl; // print out error message

使用OTL進行資料庫程式設計

  cerr<<p.stm_text<<endl; // print out SQL that caused the error

使用OTL進行資料庫程式設計

  cerr<<p.sqlstate<<endl; // print out SQLSTATE message

使用OTL進行資料庫程式設計

  cerr<<p.var_info<<endl; // print out the variable that caused the error

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

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

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計

return 0;

使用OTL進行資料庫程式設計
使用OTL進行資料庫程式設計