`
wangjunwj
  • 浏览: 38781 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Oracle中插入图片并显示(用BLOB类型)

阅读更多

Oracle中插入图片并显示(用BLOB类型)

要在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();
                 }

           }
     }

分享到:
评论

相关推荐

    oracle中的BLOB(照片)转换到mysql中

    总结来说,从Oracle的BLOB类型字段中提取并转换到MySQL的过程涉及到查询、导出、上传等多个步骤。在实际操作中,需要对数据库API有深入理解,并注意数据的兼容性和性能优化。通过以上方法,你可以顺利地在两个数据库...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    oracle向数据库里插入图片

    在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...

    java中读取ORACLE中BLOB字段存储的图片

    通过以上步骤,我们成功地实现了在Java程序中读取Oracle数据库BLOB字段中存储的图片,并在前端页面上显示出来。此方法不仅适用于图片,还可以扩展到其他类型的二进制数据,如音频、视频等文件。这对于构建多媒体应用...

    C#访问oracle数据库类,带blob字段读写

    在C#中,我们使用`OracleDbType.Blob`类型来处理Blob字段。读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob字段时,先创建`OracleParameter`对象,将其Direction...

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    以下是对使用JDBC4.0操作Oracle中BLOB类型数据的详细步骤: 首先,你需要在项目中引入Oracle JDBC驱动ojdbc6.jar,这是一个连接Oracle数据库的必备库。你可以在项目的类路径中添加这个jar包,通常将其放在/META-INF...

    Mybatis 处理 CLOB、BLOB 类型数据

    在 Oracle 数据库中,BLOB 类型对应的数据库类型是 BLOB,在 MySQL 中对应的类型是 BLOB。 MyBatis 提供了对 CLOB 和 BLOB 类型的内置支持,通过将 CLOB 类型映射到 Java 的 String 类型,BLOB 类型映射到 byte[] ...

    oracle blob 字段 读写 delphi

    Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...

    mysql oracle 插入blob数据实例源码

    本篇文章将深入探讨如何在MySQL和Oracle数据库中插入Blob数据,并提供相关的源码实例。 一、MySQL中的Blob数据插入 MySQL提供了多种方式插入Blob数据,包括使用PreparedStatement接口。以下是一个Java源码示例: ...

    JAVA操作Oracle blob类型

    在Java编程中,Oracle数据库中的BLOB(Binary Large Object)类型用于存储大量的二进制数据,如图片、视频或文档。这篇博客文章“JAVA操作Oracle blob类型”将深入探讨如何在Java应用程序中有效地管理和操作Oracle...

    利用Java向Oracle中插入图片(BLOB)文件.doc

    ### 使用Java向Oracle数据库插入图片(BLOB)文件 #### 一、概述 本文将详细介绍如何使用Java通过JDBC向Oracle数据库中插入图片文件的方法。此过程涉及到的主要技术包括Java编程语言、Oracle数据库以及JDBC驱动。...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    5. **数据库操作**:在数据库中插入和检索Blob类型的字段,通常需要使用SQL语句或者ORM框架。例如,使用Java的JDBC API,可以创建PreparedStatement来执行INSERT语句,然后使用OutputStream将BASE64解码后的字节数组...

    c#Blob图片在oracle上读取、保存、上传

    c#-操作数据库oracle的小代码,提供用于学习。代码主要实现从oracle读取、保存、上传图片等功能,使用了Oracle.DataAccess.dll,想了解相关知识的欢迎下载,有问题的请给我留言,谢谢。

    Python如何操作Oracle的Blob字段

    Python如何操作Oracle的Blob字段,

    向orcale数据库中插入blob类型的数据,插入一张图片的示例

    向orcale数据库中插入blob类型的数据,插入一张图片的示例,由于本人在完成时遇到了很多问题,最终解决了,于是整理下来,方便学习交流

    oracle中的Blob和Clob区别

    在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要用于处理大数据量的存储问题。 ####...

    c#操作oracle数据库Blob源码

    本文将深入探讨如何使用C#操作Oracle数据库中的Blob(Binary Large Object)类型字段,包括如何进行插入和更新操作。 Blob数据类型在数据库中用于存储大量的二进制数据,如图片、音频文件或大文本块。在Oracle...

    java实现 BLOB图片大文件在oracle中的存储和查找

    本教程将详细讲解如何使用Java来实现BLOB(Binary Large Object)类型的大文件,如图片,在Oracle数据库中的存储和查找,这对于初学者理解和掌握JDBC技术极具价值。 首先,我们需要理解BLOB类型。BLOB是Oracle...

    C# Oracle Blob格式的文档上传与下载

    本话题主要探讨了如何使用C#语言来实现Oracle数据库中的Blob类型字段进行文档的上传与下载操作。以下是对这一主题的详细解释。 首先,Oracle数据库中的Blob(Binary Large Object)类型用于存储大量的二进制数据,...

    oracle对大对象类型操作:blob,clob,nclob,bfile

    Oracle数据库系统支持对大型数据对象(LOBs,Large Objects)的操作,这包括BLOB、CLOB、NCLOB和BFILE四种类型。每种类型都有其特定的用途和特性,适用于存储不同类型的大数据。 1. BLOB(Binary Large Object): ...

Global site tag (gtag.js) - Google Analytics