如何读取Oracle的BLOB字段里的文件

如何读取Oracle的BLOB字段里的文件

cheungmine@gmail.com

下载源码:

http://download.csdn.net/source/589896

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

下面是完整的代码:

  1. //
  2. //read_blobfile.c-读BLOBFILE的例子
  3. //cheungmine@gmail.com//
  4. //内存泄漏检测
  5. //在需要检测的地方放置语句:
  6. //_CrtDumpMemoryLeaks();
  7. //以下3句的次序不能改变
  8. #define_CRTDBG_MAP_ALLOC
  9. #include<stdlib.h>
  10. #include<crtdbg.h>
  11. //包含唯一的ORADBI头文件
  12. #include"../oradbi.h"
  13. #ifdef_DEBUG
  14. #pragmacomment(lib,"../oradbi_dll/debug/oradbid.lib")
  15. #else
  16. #pragmacomment(lib,"../oradbi_dll/release/oradbi.lib")
  17. #endif
  18. #defineORADB_SERVICE"CHEUNG"
  19. #defineORADB_LOGUSER"mineusr"
  20. #defineORADB_PASSWORD"minepwd"
  21. /*==================================================
  22. --Createtable
  23. createtableTEST
  24. (
  25. BMVARCHAR2(10),
  26. NAMEVARCHAR2(100),
  27. BIRTHDATE,
  28. DATABLOB
  29. )
  30. tablespaceUSERS
  31. pctfree10
  32. initrans1
  33. maxtrans255
  34. storage
  35. (
  36. initial64K
  37. minextents1
  38. maxextentsunlimited
  39. );
  40. ====================================================*/
  41. //
  42. //显示如何把从BLOB字段读出数据并还原为文件
  43. //
  44. voidselect_blob_data()
  45. {
  46. lresultrc;
  47. ora_error_terr;
  48. ora_connectioncon=0;
  49. ora_sqlstmtstmt=0;
  50. ora_rowsetrs=0;
  51. ora_columncol;
  52. ora_datetimeodt;
  53. char*psz;
  54. charbuf[30];
  55. char**pp_fnames=0;
  56. ushortnum_files=0;
  57. ushortui;
  58. //创建连接
  59. rc=ORA_connection_create(&con,ORADB_SERVICE,ORADB_LOGUSER,ORADB_PASSWORD,OCI_THREADED|OCI_OBJECT,FALSE,&err);
  60. assert(rc==ORC_SUCCESS);
  61. //创建SQL,只取一行记录:whererownum<2
  62. rc=ORA_sqlstmt_create(&stmt,con,"selectBM,NAME,BIRTH,DATAfromTESTwhererownum<2",-1,0,&err);
  63. assert(rc==ORC_SUCCESS);
  64. //执行选取
  65. rc=ORA_sqlstmt_select(stmt,MOD_DEFAULT,&rs,&err);
  66. assert(rc==ORC_SUCCESS);
  67. printf("/nBMNAMEBIRTHDATA/n------------------------------------------------------/n");
  68. while(ORA_rowset_next(rs))
  69. {
  70. //BM
  71. col=ORA_rowset_get_column_by_index(rs,1,&err);
  72. assert(ORA_column_not_null(col));
  73. ORA_column_as_string(col,&psz,&err);
  74. printf("%s",psz);
  75. //NAME
  76. col=ORA_rowset_get_column_by_index(rs,2,&err);
  77. assert(ORA_column_not_null(col));
  78. ORA_column_as_string(col,&psz,&err);
  79. printf("%s",psz);
  80. //BIRTH
  81. col=ORA_rowset_get_column_by_index(rs,3,&err);
  82. assert(ORA_column_not_null(col));
  83. ORA_column_as_datetime(col,&odt,&err);
  84. ORA_datetime_to_string(odt,"YYYY-MM-DDHH:UU:SS",buf,&err);
  85. printf("%s",buf);
  86. //DATA
  87. col=ORA_rowset_get_column_by_index(rs,4,&err);
  88. assert(ORA_column_not_null(col));
  89. //读取LOB字段数据,写入文件:
  90. rc=ORA_column_read_lobfile(col,"c://temp",&pp_fnames,&num_files,&err);
  91. assert(rc==ORC_SUCCESS);
  92. for(ui=0;ui<num_files;ui++){
  93. printf("/n%s",pp_fnames[ui]);
  94. }
  95. ORA_string_list_free(pp_fnames,num_files);
  96. printf("/n");
  97. }
  98. //释放
  99. ORA_rowset_free(rs);
  100. ORA_sqlstmt_free(stmt);
  101. ORA_connection_free(con);
  102. }
  103. //
  104. //主程序
  105. //
  106. intmain(intargc,char*argv[])
  107. {
  108. select_blob_data();
  109. _CrtDumpMemoryLeaks();
  110. return0;
  111. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值