如何读取Oracle的BLOB字段里的文件
2009-04-07 13:12:07 来源:WEB开发网使用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 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;
}
- ››oracle 恢复误删除的表和误更新的表
- ››如何检查oracle的归档空间是否满了
- ››如何在浏览器中打开PDF文件并实现预览的思路与代码...
- ››如何改Win7系统我的文档保存位置
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››如何让ios app支持32位和64位
- ››如何删除Windows 8系统未知的账户
- ››如何提高win7系统的响应速度?
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››如何避免iPhone应用中内存泄露
更多精彩
赞助商链接