当前位置:  数据库>oracle

使用存储过程实现Oracle存图片的方法

    来源: 互联网  发布时间:2017-04-17

    本文导语: Oracle存图片是我们经常需要实现的功能,下面就教您一个使用存储过程实现Oracle存图片的方法,如果您在oracle存图片方面遇到过问题,不妨一看。 要在Oracle存图片 用blob类型,首先在数据库里建立: --连接到管理员conn sys/tbsoft ...

Oracle存图片是我们经常需要实现的功能,下面就教您一个使用存储过程实现Oracle存图片的方法,如果您在oracle存图片方面遇到过问题,不妨一看。

要在Oracle存图片 用blob类型,首先在数据库里建立:

--连接到管理员

  • conn sys/tbsoft as sysdba; 
  • --为scott用户授权

  • grant create any directory to scott; 
  • --回到scott用户

  • conn scott/tiger; 
  • --创建存储图片的表

  • CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL); 
  • --创建存储图片的目录

  • CREATE OR REPLACE DIRECTORY IMAGES AS 'C:picture'; 
  • --在c:下自己建一个叫picture的文件夹

  • CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS 
  • F_LOB BFILE;--文件类型

    B_LOB BLOB;

  • BEGIN     
  • iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)     
  • VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB    
  • --插入空的blob

  • F_LOB:= BFILENAME ('IMAGES', FILENAME); 
  • --获取指定目录下的文件

  • DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY); 
  • --以只读的方式打开文件

  • DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB)); 
  • --传递对象

  • DBMS_LOB.FILECLOSE (F_LOB); 
  • --关闭原始文件

  • COMMIT;  
  • END;  
  • /  
  • --在C:picture下放一张图片1.gif

    --将该图片存入表

  • call IMG_INSERT('1','1.gif'); 
  • 然后创建一个web项目 连接数据库后 创建一个BlobDAO类 用来取出表中的blob类型图片

  • public class BlobDAO {  
  •     private static final BlobDAO instance = new BlobDAO();  
  •     private Connection conn = null;  
  •     private BlobDAO() {  
  •     }  
  •     public static BlobDAO getInstance() {  
  •         return instance;  
  •     }  
  •     private void initConn() {  
  •         conn = DBAccess.getInstance().getConn();  
  •     }  
  •     public byte[] getImage(String imgname) {  
  •         BufferedInputStream ins;//取得BLOB的IO流  
  •         byte[] bt = null;  
  •         initConn();  
  •         Blob bo = null;  
  •         PreparedStatement ps = null;  
  •         ResultSet rs = null;  
  •         String sql = "select T_IMAGE from IMAGE_LOB where t_id=?";  
  •         try {  
  •               ps = conn.prepareStatement(sql);  
  •               ps.setString(1, imgname);  
  •               rs = ps.executeQuery();  
  •               if (rs.next()) {  
  •                   bo = rs.getBlob("T_IMAGE");  
  •                   try {  
  •                       ins = new BufferedInputStream(bo.getBinaryStream());  
  •                       int bufferSize = (int) bo.length();//取得BLOB的长度  
  •                       bt = new byte[bufferSize];  
  •                       try {  
  •                             ins.read(bt, 0, bufferSize);  
  •                       } catch (IOException e) {  
  •                             // TODO Auto-generated catch block  
  •                             e.printStackTrace();  
  •                       }  
  •                       //建立字节缓存  
  •                   } catch (SQLException e) {  
  •                       // TODO Auto-generated catch block  
  •                       e.printStackTrace();  
  •                   }  
  •               }  
  •         } catch (SQLException e) {  
  •               // TODO Auto-generated catch block  
  •               e.printStackTrace();  
  •         } finally {  
  •               try {  
  •                   rs.close();  
  •                   ps.close();  
  •                   conn.close();  
  •               } catch (SQLException e) {  
  •                   // TODO Auto-generated catch block  
  •                   e.printStackTrace();  
  •               }  
  •         }  
  •         return bt;  
  •     }  
  • }  
  •  
  • 在action里面调用getImage()方法并显示图片在页面上

  • public ActionForward execute(ActionMapping mapping, ActionForm form,  
  •               HttpServletRequest request, HttpServletResponse response) {  
  •         // TODO Auto-generated method stub  
  •              BlobDAO blobDAO = BlobDAO.getInstance();  
  •         byte[] bs = blobDAO.getImage("1");  
  •  
  •         try {  
  •  
  •               response.getOutputStream().write(bs);  
  •         } catch (IOException e) {  
  •               // TODO Auto-generated catch block  
  •               e.printStackTrace();  
  •         }  
  •         return null;  
  •     }  
  • 添加图片到数据库

    请在c盘下放入图片--c:\4.gif

  • public void savaImg(String imgId) {  
  •            //传的是存入数据库图片的id  
  •            initConn();  
  •            Statement st = null;  
  •            BLOB blob = null; //图片类型  
  •            OutputStream outputStream = null; //输出流  
  •            File file = null; //文件  
  •            InputStream inputStream = null; //输入流  
  •            ResultSet rs = null;  
  •            try {  
  •                  conn.setAutoCommit(false); //事物由程序员操作  
  •                  st = conn.createStatement();  
  •                  st.executeQuery("insert into IMAGE_LOB values('"+ imgId +"',empty_blob())");  
  •                  rs = st.executeQuery("select T_IMAGE from IMAGE_LOB where t_id='"+ imgId +"' for update");  
  •                  if (rs.next()) {  
  •                        blob = (BLOB) rs.getBlob(1);  
  •                        outputStream = blob.getBinaryOutputStream();  
  •                        file = new File("c:\4.gif");  
  •                        inputStream = new FileInputStream(file);  
  •                        byte[] b = new byte[blob.getBufferSize()];  
  •                        int len = 0;  
  •                        while ((len = inputStream.read(b)) != -1) {  
  •                              System.out.println(len);  
  •                              outputStream.write(b, 0, len);  
  •                        }  
  •                  }  
  •            } catch (SQLException e) {  
  •                  // TODO Auto-generated catch block  
  •                  e.printStackTrace();  
  •            } catch (FileNotFoundException e) {  
  •                  // TODO Auto-generated catch block  
  •                  e.printStackTrace();  
  •            } catch (IOException e) {  
  •                  // TODO Auto-generated catch block  
  •                  e.printStackTrace();  
  •            } finally {  
  •                  try {  
  •                        inputStream.close();  
  •                        outputStream.flush();  
  •                        outputStream.close();  
  •                        rs.close();  
  •                        st.close();  
  •                        conn.commit();  
  •                        conn.close();  
  •                  } catch (IOException e) {  
  •                        // TODO Auto-generated catch block  
  •                        e.printStackTrace();  
  •                  } catch (SQLException e) {  
  •                        // TODO Auto-generated catch block  
  •                        e.printStackTrace();  
  •                  }  
  •            }  
  •      }  

  •     
     
     

    您可能感兴趣的文章:

  • java将类序列化并存储到mysql(使用hibernate)
  • 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
  • 使用Statement.java里的execute执行存储过程问题
  • 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
  • 关于共享存储段的使用,求助高手
  • linux下怎样使用usb移动存储设备?
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • 关于如何使用shell自动执行一个sybase的存储过程
  • 急!50分!我现在想要在VECTOR中直接存储结果集???但不想使用"在VECTOR中存储一个
  • 使用存储过程实现循环插入100条记录
  • solaris上的C程序,编译报错: 存储类只能使用register,奇怪,奇怪!
  • php使用curl存储cookie的示例
  • 关于共享存储段的使用,求助高手 iis7站长之家
  • UNIX中使用putenv需要创建字符串存储空间,而且是只能在本进程中才有用
  • 对象序列化--存储数据库的方法 序列化后 不能使用
  • 想搞嵌入式驱动的开发,请大虾给个简单例程(通过SPI读写外扩存储芯片),以及开发步骤及应注意的地方,怎么加入内核和使用该驱动?谢谢
  • mysql存储过程中使用游标的实例
  • 请问怎样在调用存储过程时使用setArray方法?
  • sql server 存储过程使用 IF ELSE 的例子
  • MySQL 存储过程和"Cursor"的使用方法
  • 使用prepareCall调用存储过程,传送了TYPE_SCROLL_INSENSITIVE参数,但仍然无法实现分页功能.
  • vmware 的安装和使用,能清楚的讲一下其过程马?
  • Oracle事务!使用游标提交过程
  • 使用vmware过程中,总提示No space left on device
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息?
  • 关于Ubuntu使用过程中无故黑屏的原因
  • 请教下,应用程序使用通过驱动程序使用设备的过程
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • MySQL DNS的使用过程详细分析
  • 关于linux下编程如果处理设备在使用过程被卸去的问题
  • STL map在使用过程中用了clear为什么在Top as中还是看不到内存释放呢?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 弱智问题:我们怎么才知道要使用的方法需要实现什么接口才能使用这个方法呢?
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • 请问谁能讲讲使用软件实现的mcu原理。
  • 在Python3中使用urllib实现http的get和post提交数据操作
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 如何使用http协议实现流媒体的传输?
  • juqery的python实现:pyquery学习使用教程
  • 使用JavaScript实现的Flash运行环境 Gordon
  • 使用Applet能不能实现基于浏览器的打印呢???
  • 请问使用或安装什么软件能够实现Win2000下访问Linux分区?
  • 急急!!!高分求助,关于实现LINUX软件的使用限制问题
  • 在ACC下不使用循环怎样实现,读取文件指定行的数据.
  • 请教使用openobex库实现蓝牙传输的问题
  • 如何使用shell文件实现linux环境下的挂载功能,具体代码!!
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • 怎样在不使用offices产品开启WORD下实现将WORD内容转化为图片的格式
  • python使用循环实现批量创建文件夹示例
  • 使用实现状态栏?
  • 高分求救怎样使用libnet实现TCP的封堵技术!!!!
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3