`
wlh269
  • 浏览: 457887 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle Blob (二进制文件的读写)

阅读更多
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.SQLException;


/*
 * 建数据表
create table IMAGE_TAB
(
  IMG_ID VARCHAR2(2),
  IMAGE  BLOB
)
*/

/** 
 *
 * @author wulihai
 */
public class test {
	 Connection conn = null;
	 
   public test(){
	   conn=DBUtil.getConn();
   }
   public void write(String file) throws SQLException, IOException{
	   java.sql.Statement stmt = null; 
		 java.sql.Statement stmt2 = null; 
		 java.sql.ResultSet rs = null;
	   conn.setAutoCommit(false);
	   String sql = "insert into image_tab(img_id,image) values(1,empty_blob())";
	   stmt = conn.createStatement();
	   stmt.executeUpdate(sql);
       
       String sql2 = "select image from image_tab where img_id = 1 for update";
       stmt2 = conn.createStatement();
       rs = stmt2.executeQuery(sql2);
       if(rs.next()){
        oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
        java.io.OutputStream os = b.getBinaryOutputStream();
        java.io.InputStream is = new java.io.FileInputStream(file);
        int i = 0;
	       while((i = is.read()) != -1){
	         os.write(i);
	       }
	    conn.commit();   
	    
       if(is!=null){
    	   is.close();   
       }
       if(os!=null){
    	   os.close();   
       }
       System.out.println("写数据成功!");
       }
   }
   
   private void read(String file) throws SQLException, IOException {
	  
	  java.sql.Statement stmt = null; 
	  java.sql.ResultSet rs = null;
	   
	   String sql = "select image from image_tab where img_id=1 ";
	   stmt = conn.createStatement();
       rs = stmt.executeQuery(sql);
       if(rs.next()){
	       oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
	       java.io.InputStream is = b.getBinaryStream();
	       java.io.FileOutputStream fos = new java.io.FileOutputStream(file);
	       int i = 0;
	       while((i = is.read())!= -1){
	        fos.write(i);
	       }
	       if(fos!=null){
	    	   fos.close();
	       }
	       if(is!=null){
	    	   is.close();   
	       }
	       
       }
       
	}
   
   private void update(String file) {
	   java.sql.Statement stmt = null; 
		 java.sql.ResultSet rs = null;
		 OutputStream os=null;
		 InputStream is=null;
		 try {
		   conn.setAutoCommit(false);
		  stmt=conn.createStatement();
		  rs=stmt.executeQuery("select image from image_tab where img_id=1 for update");
		 
		   if(rs.next()){
		        oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
		         os = b.getBinaryOutputStream();
		         is = new java.io.FileInputStream(file);
		        int i = 0;
			       while((i = is.read()) != -1){
			         os.write(i);
			       }
		       System.out.println("写数据成功!");
		       }
		    conn.commit();   
		    } catch (SQLException e) {
				e.printStackTrace();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
		    } catch (IOException e) {
				e.printStackTrace();
			}finally{
				 try {
				   if(is!=null){
						is.close();
				  	} 
				   if(os!=null){
			    	   os.close();   
			       }
				  }catch (IOException e) {
						e.printStackTrace();
					}
			       }
			       
			}
   
   
   public static void main(String args[]) throws SQLException, IOException{
	   test er=new test();
	   er.write("D:\\wulihai\\合影.jpg");//读取文件系统,写blob
	   er.read("D:\\wulihai\\合影2.jpg");//读取blob,写文件系统
	   er.update("D:\\wulihai\\写给亲爱的猪.doc");//读取文件系统,更新blob
	   er.read("D:\\wulihai\\写给亲爱的猪2.doc");//再次读取blob,写文件系统
   }




   
    
}


0
1
分享到:
评论

相关推荐

    oracle blob 字段 读写 delphi

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

    Delphi将图片以二进制方式存储在数据库BLOB字段中.rar

    BLOB(Binary Large Object)字段是数据库系统中用来存储大量二进制数据的类型,非常适合图像、音频或视频文件。 首先,理解BLOB字段的工作原理至关重要。BLOB字段可以存储任意大小的二进制数据,而不像传统的字符...

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

    Blob字段用于存储大对象,如图片、视频或二进制文件。在C#中,我们使用`OracleDbType.Blob`类型来处理Blob字段。读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob...

    SqlServer与Oracle保存与读取图片二进制流

    - **创建表结构**:Oracle提供`BLOB`类型来存储二进制数据。创建`ImagesTable`,包含一个`BLOB`类型的`ImageBlob`字段。 - **保存图片**:类似于SQL Server,将图片读取为字节数组,然后使用`PL/SQL`过程或Java的...

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

    在Oracle中,BLOB用于存储二进制数据,如照片;而在MySQL中,BLOB也有类似的分类,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,分别适用于不同大小的二进制数据。 从Oracle中提取BLOB照片的步骤如下: 1. **查询...

    springMvc+Oracle的图片转二进制流

    总之,将Spring MVC与Oracle结合,处理图片二进制流,需要理解二进制流的概念,掌握文件读写、数据库操作以及Spring MVC的Controller和Service层处理逻辑。通过以上步骤,可以实现图片的上传、存储和展示,使得图片...

    批量导出ORACLE数据库BLOB字段生成图片

    Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...

    Oracle blob字段上传下载

    在数据库系统中,二进制大对象(Binary Large Object,简称BLOB)是一种用于存储大量二进制数据的数据类型,例如图像、音频或视频文件等。Oracle数据库支持Blob类型,允许用户在数据库中直接存储和管理这些大型文件。...

    Oracle导出Clob,Blob工具

    Blob类型则用于存储非结构化的二进制数据,如图片、音频文件或PDF文档。由于这些数据量大,常规的SQL查询可能无法有效处理,因此需要专门的工具来提高效率。 在提供的压缩包文件中,我们可以看到以下几个关键组件:...

    基于JSP访问ORACLE数据库BLOB字段并显示图形的解决方案.pdf

    * ORACLE数据库的BLOB字段可以存储大量的二进制数据,且性能优于LONG字段。 知识点3:坐标点的存储和读取 * 在ORACLE数据库中,坐标点被存储在BLOB字段中。 * 使用JSP技术可以读取BLOB字段中的坐标点,然后将其...

    oracle,weblogic读写blob

    BLOB 类型通常用于存储大量二进制数据,如图片、音频或视频文件。本篇文章将深入探讨如何在 Oracle 数据库与基于 WebLogic 的应用中读写 BLOB 数据。 首先,Oracle 数据库提供了多种操作 BLOB 值的方法。在 SQL ...

    JDBC+Hibernate将Blob数据写入Oracle

    在Oracle中,BLOB用于存储大量的二进制数据,如图像文件。与传统的文本或数字字段不同,BLOB字段有自己的游标(Cursor),这使得直接写入数据变得复杂。为了写入BLOB数据,首先需要创建一个空的BLOB实例,然后获取这...

    Oracle BLOB:打造敬老服务专用卡.pdf

    而BFILE类型则允许将二进制文件存储在数据库外部的操作系统文件中。BFILE类型提供了一个定位器,指向服务器文件系统上的文件,最大支持4GB的文件。 在实际操作中,可以通过PL/SQL的DBMS_LOB包进行读写操作,包括...

    数据库读取二进制图片显示

    总之,数据库读取和显示二进制图片是一个涉及多方面技术的问题,包括数据库设计、数据读写、图片处理和Web应用开发。理解这个过程有助于提升你在开发中的综合能力。通过实践和学习,你可以更好地掌握这些技能,为你...

    Java与Oracle大字段读写(含代码)

    Oracle提供了高效的流式读写接口,如`OracleBlob`的`getBinaryStream`和`setBinaryStream`方法,可以按需读取或写入数据,减少内存消耗。 另外,为了提高性能和降低网络传输成本,我们还可以考虑使用Oracle的LOB...

    商业编程-源码-使用流对二进制大对象进行读写.zip

    在数据库操作中,如Oracle、SQL Server等支持BLOB(Binary Large OBject)字段,允许存储二进制大对象。Java的JDBC和.NET的ADO.NET都提供了处理BLOB的方法,通过流接口可以直接读写数据库中的大对象,无需先将其全部...

    oracle中的Blob和Clob区别

    - **数据长度**:两者都支持最大4GB的数据存储,但`CLOB`通常用于存储文本,而`BLOB`用于存储图像或其他二进制文件。 - **编码**:`CLOB`可以使用不同的字符集编码(如UTF-8),而`BLOB`则是纯粹的二进制数据,没有...

    ado.net读写Oracle大对象

    对于Blob数据类型,通常用于存储图片、音频、视频等二进制文件。以下是一个简单的示例,演示如何使用ADO.NET在Oracle数据库中读写Blob: ```csharp using Oracle.ManagedDataAccess.Client; public void WriteBlob...

Global site tag (gtag.js) - Google Analytics