excel文件导入oracle数据库&一些方法整理
前两天做了一个批量导入,上传一个excel模版,然后在java里用jxl循环读行,对数据进行校验和转换(生成主键什么的)后,再把这条数据插入到数据库中。
今天做了个测试,导1w条数据花了56s,5w条数据就直接抛出OutOfMemory的异常了。。。
查了一下,发现是jxl的性能问题,每次它都把整个excel读入内存。装载的时候就报错了。jxl的网站说的解决方案是把JVM的内存空间设大一些。可是我的数据文件才7M多啊,又不算多大,不明白。
在网上找了一下excel文件导入到oracle数据库的方法,倒是不少,不过看了一遍下来,发现基本都是不做数据校验的,而且要保证数据本身的完整性。跟我的要求非常不符合。很多时候用户都习惯使用Excel,特别是搞财务的。一般来说,他们不关心系统里的编码什么的,提供的数据也都是业务中使用的语言,而插入到数据库肯定都得把他们转换成对应编码。
不过这些方法说不定哪天用得上,记录一下吧~
想寻找一个更好的方法,以前倒是见过用JBook的,但是用那种方法的话,必须先把excel转换为vts的格式。而且效率也没有测过。
愁死了!
-------------------------------excel导Orcale数据库的方法-----------------------------------
方法一:使用SqlLoader
1、MicroSoft Excel文件(F)→另存为(A)→
保存类型为:制表符分隔,起名为text.txt,保存到C:\
2、连入SQL*Plus
以system/manager用户登录,
SQL> conn system/manager
创建表结构
SQL> create table test
(
id number, --序号
username varchar2(10), --用户名
password varchar2(10), --密码
sj varchar2(20) --建立日期
);
3、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:
控制文件:input.ctl,内容如下:
load data --1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记录
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB)
(id,username,password,sj) --定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
4、在DOS窗口下使用SQL*Loader命令实现数据的输入
C:\>sqlldr userid=system/manager control=input.ctl
默认日志文件名为:input.log
默认坏记录文件为:input.bad
5、连接到SQL*Plus中,查看是否成功输入
方法二:使用PL/Sql
1、打开MicroSoft Excel文件(F);
2、使用PL/Sql连上相应数据库,执行
select * from DESTTABLE for update
取消锁定
3、选中Excel中要导入的数据区域,保证列的顺序和数据库字段顺序一致,ctrl+c;
4、选中PL/Sql中 DESTTABLE的要导入的列,ctrl+v;
5、执行post changes(小绿钩),然后commit。
方法三:使用Toad
没有装工具,还没试。。。
方法四:使用odbc+pb
用不同的odbc驱动程序连接不通的数据库
然后在pb环境中启动数据管道,利用数据管道传输数据
缺点:数据量大的时候,容易发生回滚段的问题,因为其无法指定专用的回滚段
也没试过。。。
方法五:使用sqlserver 的dts
做一个DTS连接把EXCEL与ORACLE 对应 的连接起来就可以直接运行导入数据了
也没试过。。。
方法六:使用excel生成脚本
比如excel文件中有id, name两列(分别为A列和B列), 要导入的表为person(person_id, person_name)
1、在excel 文件的sheet的最右列, 添加一列, 对应第一行数据的单元格写入以下内容:
= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"
2、然后把这一行复制到所有数据行对应的列中.
3、这一列的内容拷贝出去保存, 即成为可以直接在sql*plus下运行的脚本.
方法七:使用Ultra Edit等生成脚本
用列编辑功能加上insert into ....等等
方法八:使用VBA生成脚本
在Excel里加个按钮,编个宏
觉得还不如方法六简便,对用户也不够友好。
java虚拟机jvm关于内存的设置与调优
http://fengyouhua.javaeye.com/blog/58170
感慨一下,以前觉得自己编程序还是挺有悟性的
现在觉得水平停留在肤浅的层面上
会用现成的工具编些处理逻辑不算什么
对工具的实现方式完全不了
遇到问题就崩溃了
方法7是我常用的。。。
方法1~8全是维护用的,客户都不会
迫不及待看了一下
竟然是技术贴
呵呵,我以为我的blog没什么人看呢
Dee竟然用“迫不及待”来形容,好感动啊
djslfasdf
不错
请问如何在Powerbuilder中将excel中的数据导入oracle数据库中