WEB开发网
开发学院数据库Oracle 如何在oracle的blob字段里保存多个文件 阅读

如何在oracle的blob字段里保存多个文件

 2009-04-07 13:12:09 来源:WEB开发网   
核心提示: 4)创建合适的表在Oracle9i或10g中,我的例子是采用如下的语句创建的表:-- Create tablecreate table TEST( BM VARCHAR2(10), NAME VARCHAR2(100), BIRTH DATE, DATA BLOB)tablespace U

4)创建合适的表在Oracle9i或10g中,我的例子是采用如下的语句创建的表:

-- 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

  );

5)更改适合你的登录方式,改变下面的预定义值:

#define ORADB_SERVICE   "CHEUNG"

#define ORADB_LOGUSER   "mineusr"

#define ORADB_PASSWORD  "minepwd"

下面是写文件到BLOB字段的完整的例子:

//
// write_blobfile.c - 写BLOBFILE的例子
// 使用ORADBI.dll
// 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
  );
====================================================*/
//
// 下面的文件被插入到一个DATA字段
// 在这里定义你要插入的文件, 这些文件必须存在
//
const char* arrLobFiles[] = {
    "E:\eBookLib-计算机\C&C++\APress.Cryptography in C and C++_SourceCode.rar",
    "E:\eBookLib-计算机\C&C++\Charles.River.Media.Algorithms.For.Compiler.Design.eBook-LiB.chm",
    "E:\eBookLib-计算机\C&C++\C与C++中的异常处理.pdf",
    "E:\eBookLib-计算机\C&C++\The art of assmebly language.pdf",
    "E:\eBookLib-计算机\C&C++\Jones.And.Bartlett.Publishers.Foundations.Of.Algorithms.Using.Cpp.Pseudocode.3rd.Edition.eBook-Li.chm",
    "E:\eBookLib-计算机\C&C++\The C++ Standard Library.pdf",
    "E:\eBookLib-计算机\C&C++\GCC--CompleteReference.pdf",
    "E:\eBookLib-计算机\C&C++\VC技术内幕第五版.chm",
    "E:\eBookLib-计算机\Network&Tcpip\ALTHOS.Introduction.To.Data.Networks.PDN.LAN.MAN.WAN.and.Wireless.Data.Technologies.and.Systems.e.chm",
    "E:\eBookLib-计算机\Network&Tcpip\Digital Satellite Communications 2nd Ed - book.pdf",
    "E:\eBookLib-计算机\Network&Tcpip\McGraw.Hill.Storage.Networks.The.Complete.Reference.chm",
    "E:\eBookLib-计算机\Network&Tcpip\UNIX Network Programming Volume 1_3rd Edition-The Sockets Networking API.chm" 
};

//
// 显示如何把多个文件插入到BLOB字段
// 
void insert_blob_data()
{
    lresult         rc;
    ora_error_t     err;    // 不需要释放
    ora_param       p[4];
    ora_datetime    dt;
    ora_connection  con = 0;
    ora_sqlstmt     stmt = 0;
    
    // 用于绑定LOB变量的结构
    ORADBI_InBind  inbind;

    // 利用ORADBI自带的写blobfile功能
    // ORA_inbind_lobfile_init 必须在ORA_sqlstmt_bind_lob之前调用
    ORA_inbind_lobfile_init(&inbind, 0, arrLobFiles, sizeof(arrLobFiles)/sizeof(arrLobFiles[0]), &err);
        
    // 创建连接
    rc = ORA_connection_create( &con, ORADB_SERVICE, ORADB_LOGUSER, ORADB_PASSWORD, OCI_THREADED|OCI_OBJECT, FALSE, &err);
    assert(rc==_SUCCESS);
    
    // 创建SQL
    rc = ORA_sqlstmt_create( &stmt, con, "insert into TEST (BM,NAME,BIRTH,DATA) values (:bm,:name,:birth,:blob)", -1, 0, &err);
    assert(rc==_SUCCESS);

    // 绑定变量
    rc = ORA_sqlstmt_bind (stmt, ":bm", ODT_TEXT, 0, &p[0], &err); 
    assert(rc==_SUCCESS);
    rc = ORA_sqlstmt_bind (stmt, ":name", ODT_TEXT, 100, &p[1], &err); 
    assert(rc==_SUCCESS);
    rc = ORA_sqlstmt_bind (stmt, ":birth", ODT_DATE, 0, &p[2], &err); 
    assert(rc==_SUCCESS);

    // 绑定BLOB变量
    rc = ORA_sqlstmt_bind_lob (stmt, ":blob", 0, &inbind, 0, &p[3], &err); 
    assert(rc==_SUCCESS);
    
    // 设置变量的值
    rc = ORA_param_set_string(p[0], "2008", -1, &err);
    rc = ORA_param_set_string(p[1], "BeiJing", -1, &err);
        
    ORA_datetime_create(&dt, 1);
    rc = ORA_param_set_datetime(p[2], dt, &err);
    ORA_datetime_free(dt);
        
    // 执行插入
    rc = ORA_sqlstmt_execute(stmt, MOD_DEFAULT, 0, &err);
    assert(rc==_SUCCESS);
    
    rc = ORA_connection_commit(con, &err);
    assert(rc==_SUCCESS);

    // 释放结束
    ORA_inbind_lobfile_free(&inbind);
    ORA_sqlstmt_free(stmt);
    ORA_connection_free(con);
}

//
// 主程序
//
int main(int argc, char* argv[])
{
    insert_blob_data();

    _CrtDumpMemoryLeaks();

    return 0;
}

上一页  1 2 

Tags:如何 oracle blob

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接