`

java-oracle-blob对excel进行上传和下载的一些处理(转)

阅读更多

文章出自:http://blog.csdn.net/shuinianshui/article/details/6223871

 

 

1:首先是创建表

package Excel;

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 maexcel";
		String sql2="create table maexcel(" +
				"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  maexcel");
			while(rs.next()){
				System.out.println(rs.toString());
			}*/
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

2:Excel插入数据库

package Excel;

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 InsertExcel {
	
	
	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 maexcel(filename,filesize,filebody) values(?,?,EMPTY_BLOB())";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1,"excel1");
			ps.setInt(2, flength);
			ps.executeUpdate();
			ps.clearParameters();
			//插入其它数据后,定位BLOB字段===================
			u.conn.setAutoCommit(false);// 如果不关闭会报-->"错误:读取违反顺序"
			mysql="select filebody from maexcel where filename=? for update";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1, "excel1");
			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:Excel从数据库下载并生成文件

package Excel;

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 DownExcel {

	/**
	 * @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 maexcel where filename=?";
			ps=u.conn.prepareStatement(mysql);
			ps.setString(1,"excel1");
			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 Excel;

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("连接上了");
		}
		
	}*/
	
	
}

 

el : 自已做练习的小例子

Connection conn = DBUtil.getConnection();
conn.setAutoCommit(false);
Statement statement = conn.createStatement();
            String s = " select t.ws_template_id,t.ws_template_name,t.src_template from WS_TEMPLATE t where t.ws_kind = '30' and t.ws_template_id != '529' " ;
            ResultSet resultSet = statement.executeQuery(s) ;
            byte[] data = null ;
            FileOutputStream fos = null ;
            int i=1;
            while(resultSet.next()){
	            //resultSet.next();
	            String wsid = resultSet.getString(1) ;
	            System.out.println("wsid="+wsid) ;
	            Blob blob = (Blob) resultSet.getBlob(3);  
	            data = blob.getBytes(1,99999999);
	            String filename = "D:/xml/"+wsid+".xls" ;
	            //System.out.println(filename);
	            fos = new FileOutputStream(new File(filename));  
	            fos.write(data, 0,data.length );
	            fos.flush();
	            fos.close();
	            System.out.println(i++);
	            //System.out.println(data.length) ;
            }
            System.out.println("success") ;

 

 

 

分享到:
评论

相关推荐

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

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

    ORACLE导出到EXCEL

    有时,我们需要将Oracle数据库中的数据导出到Excel文件,以便进行进一步的处理或分析。本文将详细介绍如何利用Java编程语言,结合JXL库来实现这一过程,特别是处理BLOB类型的文件。 首先,理解BLOB类型。BLOB...

    Oracle导入导出图片及Excel(标注:没有源代码!)

    "Oracle导入导出图片及Excel"这个主题涉及到如何在Oracle环境中高效地处理非结构化的图片和Excel表格数据。由于没有提供源代码,我们将探讨一般性的方法和技术。 1. **Oracle BLOB类型**:Oracle数据库使用BLOB...

    Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf

    1. 支持多种视图技术:Struts2可以处理多种视图技术,如JSP、Velocity或直接生成Excel等。 2. 灵活的数据传输:模型与视图之间的数据传输非常灵活,可以支持多种数据格式。 3. 分层的架构:将应用分层为表示层、业务...

    peoplecode调用java生成word简历文档

    在IT行业中,有时我们需要集成不同的技术来实现特定功能,比如在这个场景中,"People Code调用Java生成Word简历文档"涉及到的是Oracle PeopleSoft应用中的编程技术和Microsoft Word文档生成。下面是详细的知识点解释...

    在EBS FORM中上传文件

    总结来说,在Oracle EBS中实现文件上传和下载功能需要结合前端Form设计、后端Java处理以及数据库或文件系统的存储策略。通过合理的设计和编程,可以有效地实现安全、高效的文件管理功能,满足企业的业务需求。

    文件转化需要的jar包.rar

    Apache POI是一个流行的开源库,专门用于处理Microsoft Office格式的文件,如Excel(.xls或.xlsx)、Word(.doc或.docx)和PowerPoint(.ppt或.pptx)。在二进制转换的上下文中,POI可以帮助我们将这些文档转换为二...

    SQL-Server-Data-Type-Mappings.zip_Mappings

    在SQL Server数据库管理系统中,数据类型是至关重要的概念,它定义了存储在列中的数据的类型和格式。...通过深入理解和应用这些映射,可以确保数据在不同环境中的正确传输和处理,提高系统的稳定性和效率。

    DbVisualizer.Pro.64.zip

    特别是对于Oracle数据库,DbVisualizer提供了高级特性,如CLOB(Character Large Object)和BLOB(Binary Large Object)数据类型的便捷操作,这对于处理大量文本或二进制数据至关重要。 在JDK1.8环境下运行...

    ext操作数据库实例DBExplorer

    "EXT操作数据库实例DBExplorer"是一个利用EXT库开发的数据库管理系统的示例,它提供了对多种数据库的访问和管理功能,并且能够将数据导出为Excel文件。下面我们将深入探讨EXT库以及如何与数据库交互,以及如何实现...

    matlab导入excel代码-utl_simple_convex_hull_polygon_envelop_for_a_scatter_pl

    matlab导入excel代码utl_simple_convex_hull_polygon_envelop_for_a_scatter_plot 简单的凸包多边形多边形用于散点图。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow ...

    ActiveXObject和Clob字段的插入更新

    此外,不同数据库管理系统(如MySQL、PostgreSQL、Oracle等)对Clob字段的支持和操作可能会有所不同,因此在使用时需要查阅相应的数据库文档。 总结,ActiveXObject和Clob字段分别代表了客户端脚本与服务器端组件的...

    prueba-:储存和进口档案

    1. 文件上传与下载:用户可以上传文件到系统,也可以下载保存在系统中的文件。 2. 权限管理:设定不同用户或用户组对文件的访问权限,如读取、写入和执行。 3. 版本控制:跟踪文件的更改历史,以便回滚到先前版本。 ...

    图形的旋转matlab代码-utl_sas_classic_graphics_15_plots_on_a_page:SAS经典图形每页15个图

    join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    文档管理系统

    2. 文档分类与索引:通过建立元数据结构,对文档进行分类和标记,方便快速检索。元数据包括标题、作者、创建日期等信息,使用户能够根据需要快速找到所需文档。 3. 检索功能:强大的搜索引擎支持全文检索、关键词...

    FinanceManager

    数据库管理系统(如SQL Server、MySQL或Oracle)被广泛用于存储和检索此类数据,确保数据的安全性和一致性。 2. **用户界面设计**:良好的用户体验是任何应用程序的关键。"FinanceManager"需要提供直观的用户界面,...

Global site tag (gtag.js) - Google Analytics