如何读取Oracle的BLOB字段里的文件
下载源码:
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
- #pragmacomment(lib,"../oradbi_dll/debug/oradbid.lib")
- #else
- #pragmacomment(lib,"../oradbi_dll/release/oradbi.lib")
- #endif
- #defineORADB_SERVICE"CHEUNG"
- #defineORADB_LOGUSER"mineusr"
- #defineORADB_PASSWORD"minepwd"
- /*==================================================
- --Createtable
- createtableTEST
- (
- BMVARCHAR2(10),
- NAMEVARCHAR2(100),
- BIRTHDATE,
- DATABLOB
- )
- tablespaceUSERS
- pctfree10
- initrans1
- maxtrans255
- storage
- (
- initial64K
- minextents1
- maxextentsunlimited
- );
- ====================================================*/
- //
- //显示如何把从BLOB字段读出数据并还原为文件
- //
- voidselect_blob_data()
- {
- lresultrc;
- ora_error_terr;
- ora_connectioncon=0;
- ora_sqlstmtstmt=0;
- ora_rowsetrs=0;
- ora_columncol;
- ora_datetimeodt;
- char*psz;
- charbuf[30];
- char**pp_fnames=0;
- ushortnum_files=0;
- ushortui;
- //创建连接
- rc=ORA_connection_create(&con,ORADB_SERVICE,ORADB_LOGUSER,ORADB_PASSWORD,OCI_THREADED|OCI_OBJECT,FALSE,&err);
- assert(rc==ORC_SUCCESS);
- //创建SQL,只取一行记录:whererownum<2
- rc=ORA_sqlstmt_create(&stmt,con,"selectBM,NAME,BIRTH,DATAfromTESTwhererownum<2",-1,0,&err);
- assert(rc==ORC_SUCCESS);
- //执行选取
- rc=ORA_sqlstmt_select(stmt,MOD_DEFAULT,&rs,&err);
- assert(rc==ORC_SUCCESS);
- printf("/nBMNAMEBIRTHDATA/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-DDHH: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);
- }
- //
- //主程序
- //
- intmain(intargc,char*argv[])
- {
- select_blob_data();
- _CrtDumpMemoryLeaks();
- return0;
- }