CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

怎样在oracle中存取图片?

楼主starytx(此地禁止大小便,违者没收工具!)2005-08-30 16:45:42 在 Oracle / 基础和管理 提问

我用vc做了一个程序,牵扯到在oracle数据库中存取图片的问题,不知道怎么存取。 问题点数:20、回复次数:15Top

1 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 08:44:54 得分 0

大家都没用oracle存取过图片吗?是不是只存图片的路径呀?哪oracle设置的BLOB格式的数据类型干什么用呀?Top

2 楼dnmyg2003(毛毛)回复于 2005-08-31 13:42:32 得分 5

可以将图片存到数据库中,也可以只把目录存到数据库中.  
  存图片可以通过建pl/sql存储过程实现.  
  取图片我没有做过.Top

3 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 13:53:18 得分 0

我觉得能存就应该能取,大侠能否具体说说怎么存?有示例代码最好,谢谢了Top

4 楼xusup(杂菜手)回复于 2005-08-31 14:11:06 得分 10

可以存取图片等任意文件,可通过pro*c来实现。定义三个结构,分别为blob,table,table_ind(存在null值时候使用)。然后通过c的fopen以b方式打开,,fread写入定义好的结构变量中,再用insert语句插入到db中即可。  
  读取时,反之。具体主要代码如下:  
  typedef   struct   {  
          long         len;  
          char         dat[4096000];  
  }       archive_t;  
  typedef   struct   {  
          long                 seq;                                                                   /*   seq   NUMBER(6)   */  
          char                 file_name[33];                                             /*   file_name   VARCHAR2(32)   */  
          ORA_DATE         time_stamp;                                                     /*   time_stamp   DATE()   */  
          long                 file_size;                                                       /*   file_size       NUMBER   (8)   */  
          archive_t       archive;                                                           /*   archive   LONG   RAW()   */  
  }   bs_install_files_t;  
   
  typedef   struct   {  
          short         seq_Ind;                                                           /*   seq   */  
          short         file_name_Ind;                                               /*   file_name   */  
          short         time_stamp_Ind;                                             /*   time_stamp   */  
          short         file_size_Ind;                                               /*   file_size   */  
          short         archive_Ind;                                                   /*   archive   */  
  }   bs_install_files_Ind_t;  
  bs_install_files_t   bs_install_files;  
  bs_install_files_Ind_t   bs_install_filesInd;  
   
  EXEC   SQL   VAR   bs_install_files.file_name   IS   VARCHAR2(32);                  
  EXEC   SQL   VAR   bs_install_files.archive       IS   LONG   VARRAW(4096000);  
     
          if(   (fp   =   fopen(   FileName,   "rb"   ))   ==   NULL   )   {  
                  fprintf(   stderr,   "%s:OPEN   ERROR,\n",   FileName   );  
                  return   -1;  
          }  
  numread   =   fread(   bs_install_files.archive.dat,   sizeof(   char   ),   bs_install_files.archive.len,   fp   );  
   
          EXEC   SQL   WHENEVER   SQLERROR   GOTO   sql_error;  
          EXEC   SQL  
                          insert  
                                  into         bs_install_files  
                                  values     (:bs_install_files:bs_install_filesInd)  
          ;  
          sql_error:  
          EXEC   SQL   WHENEVER   SQLERROR   CONTINUE;  
          printf("%s\n",sqlca.sqlerrm.sqlerrmc);  
  Top

5 楼xusup(杂菜手)回复于 2005-08-31 14:18:59 得分 0

顺便把从数据库写到本地硬盘也加上:定义的结构都一样,主要如下:  
   
          memset(   &bs_install_files,   0x00,   sizeof(bs_install_files)   );  
          memset(   &bs_install_filesInd,   0xff,   sizeof(bs_install_filesInd)   );  
          EXEC   SQL  
                  declare   c_bs_install_files   cursor   for  
                          select   *   from  
                                  bs_install_files;  
          EXEC   SQL   open   c_bs_install_files   ;  
          EXEC   SQL  
                  fetch   c_bs_install_files  
                          into  
                                  :bs_install_files:bs_install_filesInd;  
   
  if(   (fp   =   fopen(   FileName,   "wb"   ))   ==   NULL   )   {  
                  fprintf(   stderr,   "%s:OPEN   ERROR,\n",   FileName   );  
                  return   -1;  
          }  
   
  numwritten   =   fwrite(   bs_install_files.archive.dat,   sizeof(   char   ),   bs_install_files.archive.len,   fp   );  
   
  Top

6 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 14:28:59 得分 0

这么复杂呀,小弟太菜,看不大懂,这可怎么办呀?Top

7 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 15:18:01 得分 0

有没有诸如INSERT   之类的简单的语句就可以解决的?Top

8 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-01 08:32:15 得分 0

upTop

9 楼guoguo902(笨)回复于 2005-09-01 10:30:13 得分 1

好像可以以二进制流的形式存储在Blob字段中吧,学习中...Top

10 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-02 15:32:31 得分 0

upTop

11 楼yuanshaoyu(燕少玉)回复于 2005-09-03 14:22:58 得分 1

upTop

12 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-05 08:31:01 得分 0

upTop

13 楼lovejackchen(九龙冰封)回复于 2005-09-05 17:32:56 得分 1

upTop

14 楼cow977(牛)回复于 2005-09-05 19:03:32 得分 1

写个程序,什么语言都可以。Top

15 楼zwj0712(阿张)回复于 2005-09-05 19:37:57 得分 1

我感觉到存目录还是比较好的啊,程序直接取图片名就可以了!Top

相关问题

  • 怎样用vb.net存取oracle数据库中的图片
  • 怎样用数据库存取图片?
  • 怎样存取二进制图片
  • 谁会用BCB+ADO+ORACLE进行图片存取呢?
  • 用asp在oracle里存取图片?最好有代码
  • 用asp在oracle里存取图片?最好有代码
  • 求 ado 存取oracle blob(图片)的ocx! 要求不用BDE!
  • 请教各位大虾,delphi从oracle如何存取图片?
  • Delphi如何存取Oracle数据库中的图片数据呢?
  • Delphi如何存取Oracle数据库中的图片数据呢?

关键词

  • 数据库
  • oracle
  • sql
  • 存取
  • bs
  • 图片
  • ind
  • archive
  • stamp
  • seq

得分解答快速导航

  • 帖主:starytx
  • dnmyg2003
  • xusup
  • guoguo902
  • yuanshaoyu
  • lovejackchen
  • cow977
  • zwj0712

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo