下載源碼:
http://download.csdn.net/source/589896
使用ORADBI讀取儲存在BLOB欄位裡的多個檔案,並還原到指定的路徑下。
下面是完整的代碼:
- //
- // read_blobfile.c - 讀BLOBFILE的例子
- // cheungmine@gmail.com//
- // 記憶體流失檢測
- // 在需要檢測的地方放置語句:
- // _CrtDumpMemoryLeaks();
- // 以下3句的次序不能改變
- #define _CRTDBG_MAP_ALLOC
- #include<stdlib.h>
- #include<crtdbg.h>
- // 包含唯一的ORADBI 標頭檔
- #include "../oradbi.h"
- #ifdef _DEBUG
- #pragma comment(lib, "../oradbi_dll/debug/oradbid.lib")
- #else
- #pragma comment(lib, "../oradbi_dll/release/oradbi.lib")
- #endif
- #define ORADB_SERVICE "CHEUNG"
- #define ORADB_LOGUSER "mineusr"
- #define ORADB_PASSWORD "minepwd"
- /*==================================================
- -- Create table
- create table TEST
- (
- BM VARCHAR2(10),
- NAME VARCHAR2(100),
- BIRTH DATE,
- DATA BLOB
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- ====================================================*/
- //
- // 顯示如何把從BLOB欄位讀出資料並還原為檔案
- //
- void select_blob_data()
- {
- lresult rc;
- ora_error_t err;
- ora_connection con = 0;
- ora_sqlstmt stmt = 0;
- ora_rowset rs = 0;
- ora_column col;
- ora_datetime odt;
- char *psz;
- char buf[30];
- char **pp_fnames = 0;
- ushort num_files = 0;
- ushort ui;
-
-
- // 建立串連
- rc = ORA_connection_create( &con, ORADB_SERVICE, ORADB_LOGUSER, ORADB_PASSWORD, OCI_THREADED|OCI_OBJECT, FALSE, &err);
- assert(rc==ORC_SUCCESS);
-
- // 建立SQL, 只取一行記錄: where rownum<2
- rc = ORA_sqlstmt_create( &stmt, con, "select BM,NAME,BIRTH,DATA from TEST where rownum<2", -1, 0, &err );
- assert(rc==ORC_SUCCESS);
-
- // 執行選取
- rc = ORA_sqlstmt_select(stmt, MOD_DEFAULT, &rs, &err);
- assert(rc==ORC_SUCCESS);
- printf("/n BM NAME BIRTH DATA/n------------------------------------------------------/n");
- while (ORA_rowset_next(rs))
- {
- // BM
- col = ORA_rowset_get_column_by_index(rs, 1, &err);
- assert(ORA_column_not_null(col));
- ORA_column_as_string(col, &psz, &err);
- printf(" %s ", psz);
- // NAME
- col = ORA_rowset_get_column_by_index(rs, 2, &err);
- assert(ORA_column_not_null(col));
- ORA_column_as_string(col, &psz, &err);
- printf(" %s ", psz);
- // BIRTH
- col = ORA_rowset_get_column_by_index(rs, 3, &err);
- assert(ORA_column_not_null(col));
- ORA_column_as_datetime(col, &odt, &err);
- ORA_datetime_to_string(odt, "YYYY-MM-DD HH:UU:SS", buf, &err);
- printf(" %s ", buf);
- // DATA
- col = ORA_rowset_get_column_by_index(rs, 4, &err);
- assert(ORA_column_not_null(col));
- // 讀取LOB欄位資料, 寫入檔案:
- rc = ORA_column_read_lobfile(col, "c://temp", &pp_fnames, &num_files, &err);
- assert(rc==ORC_SUCCESS);
-
- for(ui=0; ui<num_files; ui++){
- printf("/n%s", pp_fnames[ui]);
- }
- ORA_string_list_free(pp_fnames, num_files);
- printf("/n");
- }
- // 釋放
- ORA_rowset_free (rs);
- ORA_sqlstmt_free(stmt);
- ORA_connection_free(con);
- }
- //
- // 主程式
- //
- int main(int argc, char* argv[])
- {
- select_blob_data();
- _CrtDumpMemoryLeaks();
- return 0;
- }
出處:http://blog.csdn.net/cheungmine/archive/2008/08/27/2836925.aspx