使用ORADBI讀取存儲在BLOB字段裡的多個文件,並還原到指定的路徑下。
下面是完整的代碼:
//
// read_blobfile.c - 讀BLOBFILE的例子
// [email protected]//
// 內存洩漏檢測
// 在需要檢測的地方放置語句:
// _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 DATAn----------------------------------------- -------------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://download.csdn.net/source/589896