如何把excel数据导入数据库

Posted exman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把excel数据导入数据库相关的知识,希望对你有一定的参考价值。

这里介绍2种把excel数据导入oracle数据库的方法。

 

1. 在excel中生成sql语句。

 

1)在数据列的右侧,第一行的任何位置输入="insert into table(xx,yyy..) values(‘"&A2&"‘, ‘"&B2&"‘….);"

注意:

  •  整个sql语句用双引号套着。
  • values值中使用 "&A2&"  来引用A列的第二行数据,再外面的单引号是因为values中的值(varchar型)需要单引号。

2)写完一行后往下拖,自动生成其他行的sql。

3)把这些sql copy到pl/sql dev工具中执行。

 

这种方法适合数据量不太大,且只含有varchar(或者说转入数据库中都为varchar类型字段)这种简单的数据类型的数据。对于含有日期类型的要注意,如果excel格式中有日期类型的,使用这种方法引用出来的值是个浮点数。需要首先把日期格式转换成文本格式。再写sql语句,它才能引用正确的日期格式的值。insert into user_test(seq, msisdn,user_name,dt,comment1,comment2) values(‘1‘,‘13597093898‘,‘张三42‘,to_date(‘2013/2/8 20:00:01‘,‘yyyy/mm/dd HH24:mi:ss‘),‘yyyy‘,‘yyyyy‘);

 技术分享图片

 

但存在以下情况不建议用这种方法了。

1. 对于数据量很大,几十万,上百万的数据。

2. 如果数据库表存在由序列生成的列。

3. 存在日期格式列的excel。——我没有找到很方便的直接把日期格式转为文本格式的方法(如直接转换成文本,它会显示成浮点),因此存在日期格式的excel列不建议采用这种方法。

 

当然第二点,还是可以通过其他方法解决的,就是写触发器。

在写insert语句插入的列不包含序列的列,写触发器,当表进行insert之前生成序列号插入。

 

假设数据库表如下

 

技术分享图片
create table user_test

(

   seq number(10) primary key,

   msisdn varchar2(11) not null,

   user_name varchar2(50) not null,

   dt     date,

   comment1 varchar2(50),

   comment2 varchar2(50)

);

 

create sequence user_test_seq

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

 

insert变成这样写:

insert into user_test(msisdn,user_name,dt,comment1,comment2) values(‘13597093898‘,‘张三42‘,to_date(‘2013/2/8 20:00:01‘,‘yyyy/mm/dd HH24:mi:ss‘),‘yyyy‘,‘yyyyy‘);

 
技术分享图片

 

 

触发器:

 

技术分享图片
CREATE OR REPLACE TRIGGER my_trigger

  BEFORE INSERT

  ON user_test  FOR EACH ROW

WHEN (new.seq is null)

BEGIN

  SELECT user_test_seq.nextval INTO :new.seq  FROM DUAL;

END my_trigger;
技术分享图片

 

 

其中:new.seq是指新列中的seq字段。

 

 

为更好的解决这些问题, 下面介绍第二种方法。

 

2. 写loader

 

1) 把excel中的数据另存为.csv文件,字段逗号分隔。假设保存为gov.csv

2 )写ctl文件:

 

 gov.ctl

技术分享图片
LOAD DATA

INFILE ‘gov.csv‘

APPEND

INTO TABLE  user_test

FIELDS TERMINATED BY ‘,‘

trailing nullcols

//下面列先后顺序同文件中数据字段的顺序。

(

seq "user_test_seq.nextval",

MSISDN,

user_name,

DT date "yyyy/mm/dd HH24:mi",

comment1 ,

comment2

)
技术分享图片

 

 

3) 写par文件, 假设名为test.par,其内容为:

技术分享图片
userid=用户/密码

control=./gov.ctl

log=./t.log

bad=./t.bad

skip=1            //跳过第一行标题

rows=10000   //每n行commit一次
技术分享图片

 

 

4)sqlldr parfile=test.par

 

在我的服务器上,导入百多万的数据应该是一分钟之内的事。

以上是关于如何把excel数据导入数据库的主要内容,如果未能解决你的问题,请参考以下文章

java把数据导出为excel,如何实现每十条数据导入一个excel中,每十条数据导入一个excel中

如何把excel表格的数据批量导入word模板文档内?

如何通过java把Excel表导入到数据库中已经创建的表中或者新建一个表???求代码???谢谢!!!

如何把网络的网页表格数据导入到Excel表中

如何把excel表格数据导入到数据库

如何把一个excel文件的数据导入另一个excel文件?