oracle读取blob的内容,如何读取Oracle的BLOB字段里的文件 -电脑资料

使用ORADBI读取存储在BLOB字段里的多个文件,并还原到指定的路径下,

下面是完整的代码:

//

// read_blobfile.c - 读BLOBFILE的例子

// cheungmine@gmail.com//

// 内存泄漏检测

// 在需要检测的地方放置语句:

//        _CrtDumpMemoryLeaks();

// 以下3句的次序不能改变

#define _CRTDBG_MAP_ALLOC

#include#include// 包含唯一的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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值