萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> 如何讀取Oracle的BLOB字段裡的文件

如何讀取Oracle的BLOB字段裡的文件

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

copyright © 萬盛學電腦網 all rights reserved