C 程式中使用OTL來操作Oracle資料庫

2021-10-11 02:14:49 字數 2125 閱讀 1880

如果經常使用c++連線資料庫,你會發現otl連線資料庫確實挺方便的,你可以選擇odbc或者ado等方式。但是,它所有的**都放在乙個標頭檔案otlv4.h中,我們在寫程式的時候直接將標頭檔案包含進來,就可以呼叫其中的類中的函式進行資料庫的連線,增刪改查等操作。最近一直在使用oracle資料庫,這次就使用otl連線oracle資料庫,oracle資料庫提供乙個呼叫的介面(oci),是oracle公司開發的乙個應用程式開發工具,是乙個通過訪問oracle資料庫的伺服器,控制各類sql語句的執行,進而建立應用程式介面(api),otl就是通過oci對oracle資料庫進行操作。

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

【注意】在裡面有乙個auto_commit_on函式是來設定auto_commit標誌的,當auto_commit=1是設定每乙個執行的sql語句都會自動提交,就是做一步就有一步的改變,如果是等於0,那麼就是要整個sql語句成功才算成功

otl很好用,結合官方提供的一些例子,多多嘗試才能領悟。其中有些地方,比如對網路異常的處理,可是費了我兩天的時間才解決的。廢話少說,開始正題:

一、開始前的準備工作

在使用otl進行程式設計之前,要首先確定使用的oralce版本以及所選用的字符集。otl支援目前幾乎所有的主流資料庫,可以通過巨集啟用otlv4.h中對應的資料庫操作介面。

如:使用oracle 11g r2、字符集選擇utf8,則可在包含otlv4.h之前宣告以下兩個巨集:

#define otl_ora11g_r2

#define otl_ora_utf8

#include "otlv4.h"

....

二、常用類及其常用成員三、對於網路異常的處理

現在專案對於程式的異常處理能力要求越來越高,比如網路中斷或資料庫出現異常等,要求在故障恢復後,程式能正常與資料庫保持連線,使業務盡可能的少受影響。可以通過以下方法解決此種情況。這也是折磨了我兩天的乙個問題:(

首先,程式要在提交資料的地方使用try...catch捕獲otl_exception異常,當提交失敗時,otl會丟擲此異常並攜帶異常資訊;

其次,要在捕獲到異常之後,關閉之前的連線物件(如果有流使用此連線物件,則一定要先關閉流物件,然後再斷開otl_connect物件);

最後,重新連線資料庫並再次初始化流物件。

如:

void reconnect(otl_connect &otlconnect, const char *pconnstr, int iautocommit);

....

//宣告otl物件並初始化物件

otl_connect dbconn;

otl_stream outstream;

void init(void)

catch (otl_exception &e) }

//提交資料的函式

void submit(void)

} catch(otl_exception &e) }

//重新連線連線資料庫函式

void reconnect(otl_connect &otlconnect, const char *pconnstr, int iautocommit)

retry:

trycatch (otl_exception &e)

}

這樣,呼叫submit函式提交資料時,就有了網路異常處理功能,若提交失敗則會一直嘗試重新連線,直到連線成功為止。

關於C 中使用is和as操作符來轉型

過去對於這還不是怎麼了解,今天自己細細的讀了這方面的書。所以寫個部落格分享下吧。在c 語言中進行型別轉換的另一種方式是使用is操作符,is檢查乙個物件是否相容指定的型別,並且返回乙個boolean值,要注意的地方就是is操作符永遠不會丟擲異常。它的用法呢就是諸如這樣 if o is student ...

c 中使用new來分配記憶體

指標初始化為變數的位址,比如 int pt higgens 這時候變數在程式編譯的時分配的有名稱的記憶體,指標只是為可以通過名稱直接訪問的記憶體提供乙個別名。其實指標真正的厲害在於,在執行階段分配未命名的記憶體以儲存,在這種情況下,只能通過指標來訪問記憶體 在c語言中,可以用庫函式malloc 來分...

C 程式中使用系統熱鍵

1.首先引入system.runtime.interopservices using system.runtime.interopservices 2.在類內部宣告兩個api函式,它們的位置和類的成員變數等同.system.runtime.interopservices.dllimport user...