首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(转)大数据量的excel资料读取——2003及之前版本(含代码及示例)

2012-12-28 
(转)大数据量的excel文件读取——2003及之前版本(含代码及示例)现在的任务就是把客户数据迁移到数据库中,由

(转)大数据量的excel文件读取——2003及之前版本(含代码及示例)

现在的任务就是把客户数据迁移到数据库中,由于客户提供的数据都存储在excel中,有些文件数据量还很大,在 usermodel模式下经常内存溢出,于是只能采用直接通过pl/sql往数据库复制或是用eventusermodel模式读取。直接复制倒是简单,但是速度太慢,一次复制的太多也会内存溢出。?

???? usermodel模式对excel操作前需要将文件全部转入内存,对较大文件来说内存开销很大。但是其使用简单。

???? eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,效率高,因为不用等待文件全部装入内存。但使用较复杂。

?

???? excel读取采用的API为POI3.6,使用前先下载此包,若运行中出现其他依赖包不存在,请下载相应依赖包。

?

??? 下面展示的是excel2003及其之前版本的大文件读取方法。

?

抽象类 HxlsAbstract:

    ?

    继承类: HxlsBig,作用:将excel中数据转储到数据库临时表中,实现optRows方法

    ?

      package?com.gaosheng.util.examples.xls; ??import?java.io.FileInputStream; ?? import?java.io.FileNotFoundException; ?? import?java.io.IOException; ?? import?java.io.PrintStream; ?? import?java.sql.Connection; ?? import?java.sql.DriverManager; ?? import?java.sql.PreparedStatement; ?? import?java.sql.SQLException; ?? import?java.sql.Statement; ?? import?java.util.List; ?? import?java.util.Properties; ?? ??import?org.apache.poi.poifs.filesystem.POIFSFileSystem; ?? ??import?com.gaosheng.util.xls.HxlsAbstract; ?? ????public?class?HxlsBig?extends?HxlsAbstract{ ?? ???? ??????public?static?void?main(String[]?args)?throws?Exception?{ ?? ????????//?XLS2CSVmra?xls2csv?=?new?XLS2CSVmra(args[0],?minColumns); ?? ????????HxlsBig?xls2csv?=?new?HxlsBig("E:/up.xls","hxls_temp"); ?? ????????xls2csv.process(); ??????????xls2csv.close(); ??????} ?????? ??????public?HxlsBig(POIFSFileSystem?fs,?PrintStream?output,String?tableName) ?? ????????????throws?SQLException?{ ?? ????????super(fs); ?? ????????this.conn?=?getNew_Conn(); ?? ????????this.statement?=?conn.createStatement(); ?? ????????this.tableName?=?tableName; ?? ????} ????????public?HxlsBig(String?filename,String?tableName)?throws?IOException, ?? ????????????FileNotFoundException,?SQLException?{ ??????????this(new?POIFSFileSystem(new?FileInputStream(filename)),?System.out,tableName); ?? ????} ????????private?Connection?conn?=?null; ?? ????private?Statement?statement?=?null; ?? ????private?PreparedStatement?newStatement?=?null; ?? ??????private?String?tableName?=?"temp_table"; ?? ????private?boolean?create?=?true; ?? //??private?int?sheetIndex?=?0; ?? ???? ??????public?void?optRows(int?sheetIndex,int?curRow,?List<String>?rowlist)?throws?SQLException?{ ?? ????????if?(curRow?==?0?&&?sheetIndex?==?0?)?{ ?? ????????????StringBuffer?preSql?=?new?StringBuffer("insert?into?"?+?tableName ?? ????????????????????+?"?values("); ?? ????????????StringBuffer?table?=?new?StringBuffer("create?table?"?+?tableName ?? ????????????????????+?"("); ?? ????????????int?c?=?rowlist.size(); ?? ????????????for?(int?i?=?0;?i?<?c;?i++)?{ ?? ????????????????preSql.append("?,"); ?? ????????????????table.append(rowlist.get(i)); ??????????????????table.append("??varchar2(100)?,"); ?? ????????????} ????????????????table.deleteCharAt(table.length()?-?1); ?? ????????????preSql.deleteCharAt(preSql.length()?-?1); ?? ????????????table.append(")"); ?? ????????????preSql.append(")"); ?? ????????????if?(create)?{ ?? ????????????????statement?=?conn.createStatement(); ??????????????????try{ ?? ????????????????????statement.execute("drop?table?"+tableName); ?? ????????????????}catch(Exception?e){ ?? ???????????????????? ??????????????????}finally{ ?? ????????????????????System.out.println("表?"+tableName+"?删除成功"); ?? ????????????????} ??
    </d

热点排行