要在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的过程涉及到查询、导出、上传等多个步骤。在实际操作中,需要对数据库API有深入理解,并注意数据的兼容性和性能优化。通过以上方法,你可以顺利地在两个数据库...
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...
在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...
通过以上步骤,我们成功地实现了在Java程序中读取Oracle数据库BLOB字段中存储的图片,并在前端页面上显示出来。此方法不仅适用于图片,还可以扩展到其他类型的二进制数据,如音频、视频等文件。这对于构建多媒体应用...
在C#中,我们使用`OracleDbType.Blob`类型来处理Blob字段。读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob字段时,先创建`OracleParameter`对象,将其Direction...
以下是对使用JDBC4.0操作Oracle中BLOB类型数据的详细步骤: 首先,你需要在项目中引入Oracle JDBC驱动ojdbc6.jar,这是一个连接Oracle数据库的必备库。你可以在项目的类路径中添加这个jar包,通常将其放在/META-INF...
在 Oracle 数据库中,BLOB 类型对应的数据库类型是 BLOB,在 MySQL 中对应的类型是 BLOB。 MyBatis 提供了对 CLOB 和 BLOB 类型的内置支持,通过将 CLOB 类型映射到 Java 的 String 类型,BLOB 类型映射到 byte[] ...
Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...
本篇文章将深入探讨如何在MySQL和Oracle数据库中插入Blob数据,并提供相关的源码实例。 一、MySQL中的Blob数据插入 MySQL提供了多种方式插入Blob数据,包括使用PreparedStatement接口。以下是一个Java源码示例: ...
在Java编程中,Oracle数据库中的BLOB(Binary Large Object)类型用于存储大量的二进制数据,如图片、视频或文档。这篇博客文章“JAVA操作Oracle blob类型”将深入探讨如何在Java应用程序中有效地管理和操作Oracle...
### 使用Java向Oracle数据库插入图片(BLOB)文件 #### 一、概述 本文将详细介绍如何使用Java通过JDBC向Oracle数据库中插入图片文件的方法。此过程涉及到的主要技术包括Java编程语言、Oracle数据库以及JDBC驱动。...
5. **数据库操作**:在数据库中插入和检索Blob类型的字段,通常需要使用SQL语句或者ORM框架。例如,使用Java的JDBC API,可以创建PreparedStatement来执行INSERT语句,然后使用OutputStream将BASE64解码后的字节数组...
c#-操作数据库oracle的小代码,提供用于学习。代码主要实现从oracle读取、保存、上传图片等功能,使用了Oracle.DataAccess.dll,想了解相关知识的欢迎下载,有问题的请给我留言,谢谢。
Python如何操作Oracle的Blob字段,
向orcale数据库中插入blob类型的数据,插入一张图片的示例,由于本人在完成时遇到了很多问题,最终解决了,于是整理下来,方便学习交流
在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要用于处理大数据量的存储问题。 ####...
本文将深入探讨如何使用C#操作Oracle数据库中的Blob(Binary Large Object)类型字段,包括如何进行插入和更新操作。 Blob数据类型在数据库中用于存储大量的二进制数据,如图片、音频文件或大文本块。在Oracle...
本教程将详细讲解如何使用Java来实现BLOB(Binary Large Object)类型的大文件,如图片,在Oracle数据库中的存储和查找,这对于初学者理解和掌握JDBC技术极具价值。 首先,我们需要理解BLOB类型。BLOB是Oracle...
本话题主要探讨了如何使用C#语言来实现Oracle数据库中的Blob类型字段进行文档的上传与下载操作。以下是对这一主题的详细解释。 首先,Oracle数据库中的Blob(Binary Large Object)类型用于存储大量的二进制数据,...
Oracle数据库系统支持对大型数据对象(LOBs,Large Objects)的操作,这包括BLOB、CLOB、NCLOB和BFILE四种类型。每种类型都有其特定的用途和特性,适用于存储不同类型的大数据。 1. BLOB(Binary Large Object): ...