`

java-oracle-blob对excle进行上传和下载的一些处理

阅读更多
1:首先是创建表
package Excle;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CreatTable {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Util util=new Util();
		String sql1="drop table maexcle";
		String sql2="create table maexcle(" +
				"filename varchar2(50),filesize number(20),filebody blob,primary key(filename))";
		try {
			Statement stat=util.conn.createStatement();
//			stat.executeUpdate(sql1);
			System.out.println(sql2);
			stat.execute(sql1);System.out.println("删除成功");
			stat.execute(sql2);System.out.println("创建成功");
			util.conn.commit();
			
/*			ResultSet rs=stat.executeQuery("select * from  maexcle");
			while(rs.next()){
				System.out.println(rs.toString());
			}*/
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

2:Excle插入数据库

package Excle;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import oracle.sql.BLOB;

public class InsertExcle {
	
	
	public static void main(String[]args){
		Util u=new Util();
		byte[] data=null;//**将测试文件out.xls读入此字节数组
		FileInputStream fis=null;
		FileOutputStream fos=null;
		OutputStream os=null;
		ResultSet rs=null;//**这里rs一定要用Oracle提供的
		PreparedStatement    ps=null;//**PreparedStatement用Oracle提供的
		try{
			
			File file=new File("D://out.xls");
			fis=new FileInputStream(file);
			int flength=(int)file.length();
			System.out.println("file length is:"+flength+"===========");
			data=new byte[flength];
			int itotal=0;int i=0;
			for(;itotal<flength;itotal++){
				i=fis.read(data, itotal,flength-itotal);
			}
			fis.close();
			System.out.println("read itotal :"+itotal+"===========");
			
			String  mysql="insert into maexcle(filename,filesize,filebody) values(?,?,EMPTY_BLOB())";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1,"excle1");
			ps.setInt(2, flength);
			ps.executeUpdate();
			ps.clearParameters();
			//插入其它数据后,定位BLOB字段===================
			u.conn.setAutoCommit(false);// 如果不关闭会报-->"错误:读取违反顺序"
			mysql="select filebody from maexcle where filename=? for update";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1, "excle1");
			rs=ps.executeQuery();
			if(rs.next()){
				BLOB blob= (BLOB) rs.getBlob(1);//得到BLOB字段
				os=blob.getBinaryOutputStream();
				// data是传入的byte数组,定义:byte[] data   
                os.write(data, 0, data.length);   
                os.flush();
                os.close();
				u.conn.commit();
				rs.close();
			}
			System.out.println("insert into ok=====================");
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				fis.close();
				fos.close();
				rs.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

3:Excle从数据库下载并生成文件

package Excle;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import oracle.sql.BLOB;

public class DownExcle {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Util u=new Util();
		byte[] data=null;//**将测试文件test.doc读入此字节数组
		FileInputStream fis=null;
		FileOutputStream fos=null;
		OutputStream os=null;
		ResultSet rs=null;//**这里rs一定要用Oracle提供的
		PreparedStatement    ps=null;//**PreparedStatement用Oracle提供的
		try{
			
			String mysql="select filebody,filesize from maexcle where filename=?";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1,"excle1");
			rs=ps.executeQuery();
			int flength=0;
			if(rs.next()){
				BLOB blob=(BLOB) rs.getBlob(1);
				System.out.println("blob length is "+blob.getLength());
				data=blob.getBytes(1,rs.getInt(2));//从BLOB取出字节流数据
				flength=data.length;
				System.out.println("data length is "+flength);
				u.conn.commit();
			}
			rs.close();
			//将blob取出的数据写入文件
			fos=new FileOutputStream(new File("D:/testout.xls"));
			fos.write(data, 0,data.length );
			System.out.println("文件下载成功---------》》");
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				fos.close();
				rs.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}

}

4:数据库连接

package Excle;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Util {
	static Connection conn=null;
	public Util() {
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

				conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.90.204:1521:power","gdtmis","gdtmis");
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
/*	public  static  void main (String[]args){
		Util u=new Util();
		if(u.conn!=null){
			System.out.println("连接上了");
		}
		
	}*/
	
	
}
分享到:
评论

相关推荐

    java对oracle数据库中blob字段的处理

    Java对Oracle数据库中BLOB字段的处理涉及多个层面,包括读取、写入、更新以及跨数据库操作等。 ### Java处理Oracle BLOB字段的基本方法 #### 1. 读取BLOB字段 在Java中,读取Oracle数据库中的BLOB字段通常通过`...

    数据库的完整备份与恢复 \"--hex-blob\"

    数据库是存储和管理数据的核心工具,对于任何企业或组织来说,数据的安全性和可恢复性至关重要。本文将深入探讨“数据库的完整备份与恢复”以及如何使用`--hex-blob`选项来确保数据的准确无误。 首先,让我们理解...

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

    ### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...

    mysql-connector-java-8.0.22.jar

    MySQL Connector/J 8.0.22 是MySQL数据库与Java应用程序之间进行通信的重要桥梁,它是一个实现了JDBC(Java Database Connectivity)规范的驱动程序。在Java应用中,我们需要这个驱动来连接并操作MySQL数据库。本篇...

    使用JAVA读取ORACLE_BLOB字段实现上传下载.doc

    使用 JAVA 读取 ORACLE BLOB 字段实现上传下载 BLOB(Binary Large Objects)是一种二进制大对象类型,常用于存储大对象,例如图形、声音等。我们可以将 BLOB 区分为三种形式:声像数据、二进制数据和大文本数据。...

    oracle_java_blob

    在Java编程中,Oracle数据库是常用的存储系统,尤其在处理大量结构化和非结构化数据时,例如多媒体文件(如MP3)。Oracle数据库支持BLOB(Binary Large Object)类型,用于存储大容量的二进制数据。本篇将详细介绍...

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

    本篇将详细讲解如何在Oracle与MySQL之间进行BLOB类型的转换,特别是针对照片的处理。 首先,让我们了解BLOB类型。BLOB是一种可以存储大量二进制数据的对象,分为四种子类型:BLOB、CLOB、NCLOB和BFILE。在Oracle中...

    Java-图片BLOB的存取DEMO

    20180828开发,提供了三种通过JDBC实现图片存储到BLOB的方式: ...2、com.ub:实现简单的插入及读取操作,读取后的... 然后将Base64字符串传参到Controller后进行解码处理后再存储到BLOB字段。 依赖Jar包: ojdbc6.jar

    谷歌java格式-重新格式化 Java 源代码以符合 Google Java 风格

    谷歌java格式 google-java-format是一个重新格式化 Java 源代码以符合 Google Java Style的程序。 使用格式化程序 从命令行 下载格式化程序 并运行它: java -jar /path/to/google-java-format-${GJF_VERSION?}-all...

    Oracle blob字段上传下载

    本文详细介绍了如何在Oracle数据库中进行Blob字段的上传和下载操作。通过具体的Java示例代码,展示了整个过程的关键步骤和技术要点。这对于需要处理大量二进制数据的应用来说是非常有用的技巧。希望本文能够帮助...

    oracle中对blob字段的处理方法

    oracle中对blob字段的处理方法,包括增加,删除,修改,更新等操作。

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

    Oracle数据库在存储大对象...总之,批量导出Oracle数据库中的BLOB字段生成图片涉及到了数据库连接、SQL查询、BLOB数据处理和文件I/O等多个技术环节。掌握这些知识点对于管理和维护包含二进制数据的数据库系统至关重要。

    在Oracle中存取BLOB对象实现文件的上传和下载.txt

    ### 在Oracle中存取BLOB对象实现文件的上传和下载 #### 核心知识点解析: **一、BLOB数据类型简介** BLOB(Binary Large Object)是数据库中的二进制大对象类型,主要用于存储大量二进制数据,如图像、音频、视频等...

    文件上传至oracle blob字段的java实现

    指定文件夹下的所有文件上传至oracle的blob字段,java实现

    java file upload BLOB

    使用 Java 进行文件上传至数据库 BLOB 字段 #### 知识点说明: 在Java Web开发中,经常需要处理用户上传的文件,比如图片、文档等。这些文件通常比较大,如果直接将文件的内容作为字符串保存在数据库中,可能会...

    PB12.5 ---关于BLOB转换和数据之间的转换,及各进制之间的转换

    1.转换BLOB BLOB转为Byte字节流 BLOB转为Char字节流 BLOB转为二进制字符 BLOB转为十六进制字符 2.生成BLOB Byte字节流转为BLOB Char字节流转为BLOB 二进制字符转为BLOB 十六进制字符转为BLOB 3.二进制 8位...

    clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle

    对于CLOB和BLOB字段,Oracle JDBC驱动提供了`oracle.jdbc.driver.OracleClob`和`oracle.jdbc.driver.OracleBlob`类,它们实现了Java的标准接口`java.sql.Clob`和`java.sql.Blob`。这两个接口提供了读取和写入大数据...

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

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

    批量导出ORACLE数据库BLOB字段生成文件

    通过这种方式,你可以有效地管理和处理存储在Oracle数据库中的大量BLOB数据,使其能够以文件形式在本地系统上访问和使用。 总之,批量导出Oracle数据库中的BLOB字段是一项技术性较强的任务,涉及到数据库连接、SQL...

    mysql和Oracle在对clob和blob字段的处理

    2. Oracle对`CLOB`和`BLOB`的处理: Oracle数据库提供了`CLOB`和`BLOB`数据类型,同样用于存储大量文本和二进制数据。与MySQL不同,Oracle支持分区和索引优化,使得大型数据的管理和检索更为高效。Oracle还提供了`...

Global site tag (gtag.js) - Google Analytics