自己写的数据库装载工具,平时工作中用于装载大文本文件到数据库表,也能直接装载excel,不过excel只能使用第一个sheet,且不支持合并的单元格。
jdk要求版本1.6及以上。
使用方法: java -jar lynload.jar,即可看到中文命令行参数(unix下需设置gbk字符集环境才能看中文,没gbk环境不能看中文,但不影响导入数据)。
特色:
1.同时支持多个数据库.
2.支持任意字符串作为列分隔符,什么竖线逗号或者十六进制字符及任意组合字符串都行
3.支持任意字符串作为每行分隔符,例如\r,\r\n,或者十六进制字符或任意指定的字符串(例如可实现把整个日志文件装入数据库的单个clob字段).
4.支持任意大小的文本,装入几十GB都试过没问题。
5.明确到每一行的错误信息.(装载时会生成一个.err文件,里面有装载出错的每一行错误原因(少字段还是格式不符合要求等等)。
6.可以作为库使用在jsp等后台直接调用,将整个jar作为库,使用
OraLoad类的int ProcLoad(Connection in_conn, String args[])函数就可以实现类似功能了。例如 new OraLoad.ProcLoad( null, "-u test -p testpwd -i 127.0.0.1 -s ora10 -f test.txt -t tmp_test -c , -e gbk");
具体参数如下:
Usage:
-db database type
1或者oracle, oracle数据库,不区分大小写,默认1,需java1.5及以上版本
2或者sqlserver, mssqlserver数据库,不区分大小写,需java1.6及以上版本
3或者mysql, mysql数据库,不区分大小写,需java1.5及以上版本
4或者sybase, sybase数据库,不区分大小写(暂未测试)
-url
数据库连接的url.默认空字符串
如果有url参数,则-i-p-s-dn参数全无效。
如果没有url参数,则必须提供-i-p-s参数,程序里面好拼凑url
例如: jdbc:sqlserver://localhost:1433; DatabaseName=sample
-i ip address:port
ip地址和端口,中间用冒号隔开
url不为空则此参数无效
如果不带端口,系统根据数据库类型采用默认端口
oracle数据库: 默认为1521端口
sqlserver数据库: 默认为1433端口
mysql数据库: 默认为3306端口
sybase数据库: 默认为5000端口
例如: 127.0.0.1:1521
例如: 192.168.0.1
-s serviceid or database name
oracle服务名或者其他数据库的数据库名
url不为空则此参数无效
-u username
用户名,必输
-p Password
登录密码,必输
-t TableName
要插入的表名,可以带用户,必输
例如: scott.emp 或者 emp都行
-f FileName
来源的文件名,必输
-ff FileName format
来源的文件名类型:txt,文本文件;xls:Excel2003或2007文件),默认是txt
对于Excel文件的导入,仅导入第一个sheet的内容,其他sheet的内容忽略
-e Encoding
文件的编码,默认gbk
-c Cut split string
分隔字符串,可以是多个字符组合,默认竖线
-r commit rows
每插入多少行提交一次,-1表示不提交,默认-1,如果设置了ac参数为1,则此参数无效。
注意:如果设置了此参数,每到此行数会执行一次commit,如果是外部调用此过程要注意所有数据会被提交
-ac all commit
0.插入成功的都提交,失败的登记文本,默认0; 1.全部插入成功后才提交(有失败则回滚并结束)
-a column flag
第一行的类型
0.没有列名行,默认0。此值为0则it参数不生效。
1.第一行是逗号分隔的包括列类型的列信息,例如NAME VARCHAR2(30),注意,区分大小写
2.第一行是列分隔符分隔的列名(不包括列字段信息),注意,列名区分大小写
-it insert type
1.导入的列需要跟数据库列名个数及名称完全相同,顺序无所谓,默认1
2.仅导入文件字段名与数据库字段名完全相同的数据,顺序无所谓
3.第一行是列信息,按此列信息创建新表导入数据(暂不用)
4.忽略第一行,无论第一行是什么数据全部忽略,从第二行按列字段顺序匹配装载
必须在-a 参数 > 0时才生效,否则无意义
-d date formate
日期格式,参考java的SimpleDateFormate类参数,默认自动识别
可识别格式:yyyyMMdd, yyyy-MM-dd, yyyy/MM/dd, yyyyMMdd:HHmmss(等于oracle的yyyymmdd:hh24miss)
yyyy年,MM月,dd日,HH 24小时制时,hh 12小时制时,mm 分, ss秒
-l line end string
每条记录结尾的分隔符,默认是 \r\n回车换行符,支持前面-c参数说的转义符
oracle例子: 登陆scott用户,裝载a.txt的逗号分隔的gbk编码文本内容到scott.emp
java -jar xxx.jar -i 127.0.0.1 -p 1521 -s ora10 -u system -p manager -t scott.emp -f a.txt -c ,
sqlserver例子: 登陆11.8.126.181数据库的test用户,裝载f: est.xlsx的excel数据到tmp_i表
java -jar -db sqlserver -i 11.8.126.181 -s abcd -u test -w test -f f: est.xlsx -t tmp_i -ff xls
mysql例子: 登陆本机数据库的root用户,裝载a.txt的文本数据到tmp_i表,不提交
java -jar xxx.jar -db mysql -i 127.0.0.1 -s gjjgj -u root -w root -f a.txt -t tmp_i