如何使用JDBC从Oracle数据库中检索图像?

时间:2014-05-17 18:10:59

标签: java oracle jdbc

我使用JDBC连接到oracle数据库。我知道如何检索各种数据(字符串,整数等),但我不知道如何从这个数据库中获取ORDImage。是否有任何ResultSet方法可以实现此目的?

3 个答案:

答案 0 :(得分:1)

PreparedStatement的getBlob()用于获取二进制信息,它返回Blob的实例。通过调用blob对象上的getBytes()方法,您将获得可以写入图像文件的二进制信息数组。

这是代码..

   PreparedStatement ps = con.prepareStatement("select * from MyImageTable");  
   ResultSet rs = ps.executeQuery();  

   if(rs.next()){  

   Blob blob = rs.getBlob(2); //Here 2 is second column data  
   byte b[] = blob.getBytes(1,(int)b.length());  //Here 1 represent first image  

   FileOutputStream output = new FileOutputStream("e:\\some_pic.jpg");  //path goes here
   output.write(b);  

   output.close();  

答案 1 :(得分:0)

查看oracle jdbc开发人员指南的streaming lobs部分。有几种方法可以访问数据。不同选项会对内存/性能产生不同的影响。最简单的解决方案可能是ResultSet.getBinaryStream。但是,如果您需要有关数据长度的信息,还可以使用getBlob

答案 2 :(得分:0)

有很多方法可以显示从Java库中的数据库中检索图像的方法,这是从数据库中检索图像到Java swing窗体的最佳方法,并且可以根据所需的大小以JLable显示。

        ResultSet rs = stmnt.executeQuery("select * from table1 ");
        Blob blob= rs.getBlob("image");
        byte bt[]= blob.getBytes(1,(int)blob.length());
        Image img= ImageIO.read(new ByteArrayInputStream(bt));
        Image img1= img.getScaledInstance(200,230,Image.SCALE_SMOOTH);
        ImageIcon icon= new ImageIcon(img1);

        JLable1.setIcon(icon);

Example