将本地数据根据规则导入到数据库表的几种方法

http://zhangzhongjie.iteye.com/blog/1924023

SQL*Loader 

SQL*Loader是Oracle数据库导入外部数据的一个系统工具,在Unix下,SQL Loader一般由命令和控制文件组成,命令定义执行的模式,控制文件定义数据映射和可选逻辑。SQL Loader 的特点是能装入不同数据类型文件及多个数据文件以及固定格式,自由定界以及可度长格式的数据,控制文件灵活,速度快(ORACLE自称可以达到每小时处理100GB数据的能力)等。

 

Sqlldr命令

 

首先通过查看SQL Loader的帮助信息来了解下sqlldr的使用方法(注:如下图所示,输入sqlldr后回车即可查看其帮助信息):

 


 

Ctl 控制文件

 

控制文件是SQL*Loader的灵魂,在控制文件中可以设置以何种方式导入,是追加还是覆盖;以何种方式识别数据文件等等。下面是如何编写控制文件的一个标准模板:

OPTIONS  (  [SKIP=integer] [ LOAD = integer ] [ERRORS = integer] [ROWS=integer] [BINDSIZE=integer] [SILENT=(ALL|FEEDBACK|ERROR|DISCARD) ]  )

LOAD [DATA]

[ { INFILE | INDDN } {file | * } [ STREAM | RECORD | FIXED length [BLOCKSIZE size]| VARIABLE [length] ]  [ { BADFILE | BADDN } file ] {DISCARDS | DISCARDMAX} integer ]

[ {INDDN | INFILE} . . . ]

[ APPEND | REPLACE | INSERT ]

[RECLENT integer]

[ { CONCATENATE integer | CONTINUEIF { [THIS | NEXT] (start[: end])LAST } Operator { 'string' | X 'hex' } } ]

INTO TABLE [user.]table

[APPEND | REPLACE|INSERT]

[WHEN condition [AND condition]...]

[FIELDS [delimiter] ]

(

column {

RECNUM |

CONSTANT value |

SEQUENCE ( { integer | MAX |COUNT} [, increment] ) |

[POSITION ( { start [end] | * [ + integer] } ) ]

datatype

[TERMINATED [ BY ] {WHITESPACE| [X] 'character' } ]

[ [OPTIONALLY] ENCLOSE[BY] [X]'charcter']

[NULLIF condition ]

[DEFAULTIF condotion]

}

[ ,...]

)

[INTO TABLE...]

[BEGINDATA]

 

 

1.       对数据文件的控制

a)       INFILE 和INDDN是同义词,它们后面都是要加载的数据文件。如果用 * 则表示数据就在控制文件内。

b)       STRAM 表示一次读一个字节的数据。新行代表新物理记录(逻辑记录可由几个物理记录组成)。

c)       RECORD 使用宿主操作系统文件及记录管理系统。如果数据在控制文件中则使用这种方法。

d)      FIXED length 要读的记录长度为length字节。

e)       VARIABLE 被读的记录中前两个字节包含的长度,length 记录可能的长度。缺省为8k字节。

f)        DISCARDFILE和DISCARDDN是同义词。记录没有通过的数据。DISCARDS和DISCARDMAX是同义词。Integer为最大放弃的文件个数。

 

2.       对加载方法的控制

a)       INSERT。缺省方法,该选项要求数据载入前表为空,否则SQL Loader会退出

b)       APPEND。在原有记录基础上追加数据,不影响原有数据,原有数据为空也可以。

c)       REPLACE。这种方式先删除表的数据,然后载入新纪录,值得注意的是,这种方法将触发表上的触发器

d)      TRUNCATE。这种方法在载入前,会不带记录点回滚点的删除数据,不会触发触发器,是不可恢复的。使用这种方法必须保证表没有证完整性约束,且执行用户具有权限。

 

3.       对导入逻辑的控制

a)       THIS 检查当前记录条件,如果为真则连接下一个记录。

b)       NEXT 检查下一个记录条件。如果为真,则连接下一个记录到当前记录来。

c)       Start: end 表示要检查在THIS或NEXT字串是否存在继续串的列,以确定是否进行连接。如:continueif next(1-3)='WAG' 或continueif next(1-3)=X'0d03if'

 

4.       对字段识别读取的控制

a)       TERMINATED 读完前一个字段即开始读下一个字段直到结束。 

b)       WHITESPACE 是指结束符是空格的意思。包括空格、Tab、换行符、换页符及回车符。如果是要判断但字符,可以用单引号括起,如X'1B'等。 

c)       OPTIONALLY ENCLOSED 表示数据应由特殊字符括起来。也可以括在TERMINATED字符内。使用OPTIONALLY要同时用TERMINLATED。 

d)      ENCLOSED 指两个分界符内的数据。如果同时用 ENCLOSED和TERMINAED ,则它们的顺序决定计算的顺序。

 

5.       对列定义的控制

column 是表列名。列的取值可以是: 

a)       BECHUM 表示逻辑记录数。第一个记录为1,第2个记录为2。 

b)       CONSTANT 表示赋予常数。 

c)       SEQUENCE表示序列可以从任意序号开始,格式为:SEQUENCE { integer | MAX |COUNT} [,increment] 

d)      POSITION 给出列在逻辑记录中的位置。可以是绝对的,或相对前一列的值。格式为: 

e)       POSITION ( {start[end] | * [+integer] } ) 

f)        Start 开始位置 

* 表示前字段之后立刻开始。

+ 从前列开始向后条的位置数。

例子:

OPTIONS(SKIP=0)
LOAD DATA
REPLACE
INTO TABLE CUX_TEST_TABLE
FIELDS TERMINATED BY X'09'
TRAILING NULLCOLS(
supp_id                "CUX_TEST_SEQ_S.NEXTVAL",
supp_company_code     CHAR  "TRIM(TO_CHAR(:supp_company_code))",
supp_date              DATE  'YYYYMMDD',
supp_amount           INTEGER   EXTERNAL,
supp_process_status     CONSTANT  "1", 
supp_creation_date      "to_date(SYSDATE)"
)
   

 


PLSQL Developer工具载入数据

 PLSQL Developer提供一些数据载入的工具,操作比较简单,可以定义数据映射模板,并且可重复使用。

Text Importer

载入数据

菜单栏à Tools à Text Importer


 

左上角的图标表示:

打开一个数据文件,可支持 txt, csv, tsv, prn文件

通过粘贴数据,可以从Excel中复制数据,点击这个按钮粘贴直接载入数据

新建一个导入

打开一个数据模板定义

打开一个文件或复制数据进入界面后,可以定义相关参数和模板映射,在第一个tab页定义参数:


 
在第二个tab页定义数据映射:


 
选择表的schema和表名,clear table表示是否在载入数据前清空表,然后定义数据映射,映射时需定义数据类型,和处理数据的单值函数,例如trim()。准备载入的数据可以在result preview预览。

最后点击左下角的Import就可以载入。

映射模板

相同的数据映射关系,可以保存模板,下次只要直接打开就可以重复使用映射关系和参数了。


 

ODBC Importer

 

ODBC Importer功能类似Text Importer,但是ODBC Importer可以解析二进制文件,支持dBASE file, Excel FilesMS Access Database

载入数据

 操作和Text Importer类似,在第一个tab页加载数据。

 路径:菜单栏à Tools à ODBC Importer


 
选择载入类型之后,在user namepassword处填的是要载入的到的数据库的用户名和密码,点击connect, 在弹出的对话框里选择相应文件,Excel file类型弹出的如下:


 
选择文件后数据会加载到界面:


 
第二个tab页的操作和Text Import一致,也可以保存和使用模板,并且模板在ODBC ImporterText Importer之间是可以通用的。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中将Excel导入并存储到数据库可以按照以下步骤进行: 1. 使用Java中的Apache POI库来读取Excel中的数据。首先,需要添加POI依赖项到项目的构建文件中。 2. 使用POI库中的Workbook类打开Excel文件。根据文件的扩展名(.xls或.xlsx),选择适当的Workbook实现类。 3. 通过获取工作(Sheet)并遍历工作的行(Row)和单元格(Cell),可以获取Excel中的数据。根据Excel的结构,可以使用getCell()方法获取特定单元格的数据。 4. 通过解析每个单元格的数据,并使用Java的数据结构(如List、Map等)将其存储到内存中,以便稍后将其存储到数据库。 5. 连接到数据库,并使用JDBC(Java数据库连接)编程接口来执行数据库操作。首先,需要加载适当的数据库驱动程序,并使用合适的URL、用户名和密码建立连接。 6. 创建数据库,以存储从Excel导入数据。根据Excel的结构,使用SQL语句创建和列。 7. 使用JDBC的PreparedStatement接口,为每个数据行创建并执行INSERT语句来将数据插入到数据库中。通过遍历内存中的数据集合,可以为每个数据行绑定参数并执行INSERT语句。 8. 在插入所有数据行后,提交并关闭数据库连接。关闭数据库连接可以释放资源,并确保数据被正确写入数据库。 9. 在完成数据导入后,可以进行必要的数据校验和验证。例如,检查插入的行数是否与Excel中的行数相匹配,或者检查插入的数据是否满足业务规则。 以上是将Excel数据导入数据库的基本步骤。+这个过程涉及到的具体实施会有更多的细节和实现方式,可以根据具体需求进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值