OTL 連線資料庫,獲取字段列表屬性

2021-07-06 05:26:25 字數 3980 閱讀 1856

獲取表 字段列表

方法一:

otl stream class 介紹

otl_strean 類 具體的實現了otl 流的概念。任何的sql語句、sql語句塊和儲存過程都能通過otl_stream進行處理。

傳統的資料庫api處理sql語句的時候,需要繫結變數與佔位符。所以,開發者需要宣告主陣列在程式中so, the developer has to declare host arrays in the program,解析語句 parse the statement,呼叫繫結變數 變數繫結到佔位符上、執行sql、讀取輸出的變數等等. 之後就是如此的迴圈。所有的這些都是在otl_strean 類中自己執行。 tl_stream類提供了與資料庫互動自動化最大效能。該效能僅取決於乙個引數-緩衝區大小。緩衝區是用於存放sql執行過程中的邏輯行數。

注:在timesten7.0.2或以上版本的資料庫中,定義了otl_timesten_unix或otl_timesten_windows巨集的時候,緩衝區大小可以設定為0。此時表示預設使用資料庫的最佳緩衝區大小。一般情況下是乙個元素大小。具體更多資訊請參考資料庫的手冊。

乙個sql語句在otl_stream裡面至少需要乙個輸入或輸出佔位符,對於沒有佔位符的sql語句,它將被作為常量的sql語句作為另一種方式執行。

從otl4.0.115版本開始後,緩衝區大小的型別為整形,以前的版本全是短整形。如果需要支援舊版本的**,請在編譯**前新增定義otl_stream_legacy_buffer_size_type巨集。

otl_column_desc * describe_select(int & desc_len)

取得流的輸出變數的字段列表。

僅對下列有效:

函式返回otl_column_desc結構體的指標。otl_column_desc型別如下:

序號成員變數

說明char * name

欄位名int dbtype

該值依賴於特定的資料庫。對於oci或odbc有不同的值,詳細請參見資料庫。

int otl_var_dbtype

otl定義的字段型別編碼

int dbsize

字段長度

int scale

數值型別的精度

int prec

數值型別的小數字

int nullok

指定字段是否為空

int charset_form

僅在定義了otl_unicode和otl_ora9i/otl_ora10g巨集時候有效。

1:單位元組

2:雙位元組

3:其他

int char_size

僅在定義了otl_unicode和otl_ora9i/otl_ora10g巨集時候有效。

字段長度(按字母),在otl_ora8i情況下該值為0,因為相應的屬性不被支援。

otl定義了如下的型別與相應的資料庫型別相對應:

序號otl型別常量

otl型別編碼

對應的資料庫型別

otl_var_bigint

ms sql server/db2/mysql/postgresql裡面的bigint型別(singed 64 bit integer)

otl_var_blob

oracle8/9/10/11裡面的blob型別

otl_var_char

null結尾的字元型別

otl_var_clob

oracle8/9/10/11裡面的clob型別

otl_var_db2date

db2 date型別

otl_var_db2time

db2 time型別

otl_var_double

8位元組長度的浮點型

otl_var_float

4位元組長度的浮點型

otl_var_int

有符號的32位整形

otl_var_long_int

對於llp64的c++編譯器是32位有符號整形;對於lp-64編譯器,則是64位有符號整形

otl_var_ltz_timestamp

對於oracle 9i/10g/11g,帶有time zone的timestamp型別

otl_var_raw

raw, binary, varbinary, bytea, varchar byte, char byte型別

otl_var_raw_long

oracle裡面的long raw;ms sql server/sybase裡面的image;db2裡面的blob型別

otl_var_short

16位有符號整型

otl_var_timestamp

oracle的timestamp;

db2的timestamp;

ms sql的datetime/datetime2/time/date;

sybase的timestamp型別

otl_var_tz_timestamp

oracle下的帶timezone的timestamp

otl_var_unsigned_int

無符號32位整型

otl_var_varchar_long

oracle裡面的long;

ms sql裡面的text;

db2的clob型別

除了返回結構體的指標外,該函式還返回乙個desc_len的引數。該引數表示返回的字段列表的長度。該函式返回的結構的指標不用使用者刪除,流裡面在析構的時候會處理刪除任務。

實現例子

方法二:

otl_var_desc * describe_next_out_var()說明  **於: 

otl_var_desc * describe_next_out_var()

取得下一步輸出變數。「下乙個」指的是從流中讀取了以後,下乙個讀出來的輸出變數。比如呼叫了otl_stream::operator<

例項:otl_stream streamdata;

streamdata.open(1, strsql.c_str(), *pdb);

int nlistlen = 1;

otl_column_desc* desc = streamdata.describe_select(nlistlen);

streamdata.describe_select(nlistlen);

string strtemp = "";

vectorvctattribute;

mapmaptemp;

int nkey = 0;

while( !streamdata.eof() )

strtemp = "";

streamdata>>strtemp;

maptemp.insert(pair(vctattribute[i], strtemp));

int nkk = 0;

}vctdata.push_back(maptemp);

} streamdata.close();

結果:

例項**是自己寫的實現別的功能,其中需要讀取字段屬性。

在MFC中使用OTL庫連線資料庫

在win32控制台程式下,要使用otl庫,只需在程式加入otl標頭檔案,並寫上以下兩句 即可 odbc方式 define otl odbc include otlv4.h 但是在編寫mfc程式的時候,單單用以上的做法是不行的,編譯的時候會出現如下錯誤 error lnk 2019 解決辦法是再加入o...

在MFC中使用OTL庫連線資料庫

在win32控制台程式下,要使用otl庫,只需在程式加入otl標頭檔案,並寫上以下兩句 即可 odbc方式 define otl odbc include otlv4.h 但是在編寫mfc程式的時候,單單用以上的做法是不行的,編譯的時候會出現如下錯誤 error lnk 2019 解決辦法是再加入o...

在MFC中使用OTL庫連線資料庫

在win32控制台程式下,要使用otl庫,只需在程式加入otl標頭檔案,並寫上以下兩句 即可 odbc方式 define otl odbc include otlv4.h 但是在編寫mfc程式的時候,單單用以上的做法是不行的,編譯的時候會出現如下錯誤 error lnk 2019 解決辦法是再加入o...