PowerBuilder的数据管道、MS Sqlser的数据导入工具借助ODBC可以支持所有的数据库,可以设置导入导出的表和列的对应关系,可以导出部分数据,但对于不同数据库的日期、BLOB、CLOB类型就无能为力了,而且也不能导入多个表,并且按着表的外键顺序先后导入数据。JudeForData就解决这样的问题,但目前版本没有图形化界面可以设置导入导入表的对应关系。
版本0.6.1.1(2009.08.14)
1.支持Oracle、MS Sqlserver、DB2、MySql、PostGreSQL数据库。
支持日期/时间/时间戳类型的自动转换
支持BLOB/CLOB导入
可输出SQL
可输出建库脚本
可输出文本格式的数据文件
可输出EXCEL式的数据文件
可选择源数据库和目的数据库的字符集
支持表名不同、列名不同的数据导入
优化大数据量的数据导入,使用索引查询
已知缺陷:
源表一次只能导入到一个目的表
2.支持数据类型
postgresql | oracle | |
整型 | smallint | BINARY_INTEGER |
integer | PLS_INTEGER | |
bigint | ||
serial | INTEGER | |
bigserial | INT | |
SMALLINT | ||
NUMBER | ||
浮点型 | decimal | DEC |
numeric | DECIMAL | |
real | DOUBLE PRECISION | |
double precision | FLOAT | |
NUMERIC | ||
REAL | ||
字符类型 | character varying(n), varchar(n) | CHAR,CHARACTER |
character(n), char(n) | LONG , LONG RAW | |
VARCHAR2 | ||
RAW | ||
NCHAR,NVARCHAR2 | ||
text | CLOB | |
二进制数据类型 | bytea | BLOB |
日期/时间类型 | timestamp [ (p) ] [ without time zone ] | DATE |
timestamp [ (p) ] with time zone | ||
date | ||
time [ (p) ] [ without time zone ] | ||
time [ (p) ] with time zone |
sqlserver | mysql | db2 | |
整型 | bigint | SERIAL | SMALLINT |
int | TINYINT | INTEGER/ INT | |
smallint | SMALLINT | BIGINT | |
tinyint | MEDIUMINT | ||
bit | INT | ||
INTEGER | |||
BIGINT | |||
浮点型 | decimal | FLOAT | DECIMAL(p,s) |
numeric | DOUBLE | DEC(p,s) | |
real | DOUBLE PRECISION | NUMERIC(p,s) | |
DECIMAL,DEC | NUM(p,s) | ||
REAL | |||
DOUBLE | |||
字符类型 | char | CHAR | CHAR(n) |
varchar | VARCHAR | VARCHAR(n) | |
CHARACTER VARYING(n) | |||
nchar.nvarchar | CHAR VARYING(n) | ||
LONG VARCHAR | |||
text,ntext | TEXT,LONGTEXT,TINYTEXT | CLOB(n[K|M|G]) | |
二进制数据类型 | image | TINYBLOB | BLOB |
binary | BLOB | ||
varbinary | MEDIUMBLOB | ||
LONGBLOB | |||
日期/时间类型 | timestamp | DATE | DATE |
DATETIME | TIME | ||
TIMESTAMP | TIMESTAMP |
3.需要JDK/JRE1.5以上版本
4.运行文件run_exe.bat说明
4.1.set PATH=%PATH%
如果没有配置Java到系统环境变量,则修改上面的部分set PATH=%PATH%;D:\Java\jdk1.6.0_11\bin
4.2.lib目录包括jdbc等jar,为当前运行目录的子目录lib,如果拷贝到了其它位置,则修改set PROJECT_LIB=.\lib\
4.3可以更改默认配置文件config.xml
输出目录,在run.bat中修改 JudeForData.exe %LIB_PATH% -Dconfig_file=config_my_post.xml
config.xml文件配置说明:
1.source为源数据库、destination为目的数据库,源、目的数据库只能各有一个
源数据库例子:
<source> <type>postgresql</type> <driver>org.postgresql.Driver</driver> <url>jdbc:postgresql://127.0.0.1:5432/testdb</url> <username>postgres</username> <password>manager</password> <schema>public</schema> <charset></charset> </source>
目的数据库例子:
<destination> <type>oracle</type> <driver>oracle.jdbc.driver.OracleDriver</driver> <url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</url> <username>MYDBUSER</username> <password>oracle</password> <schema>MYDBUSER</schema> </destination>
如果导出数据库的建表文件等,源数据库的type及连接等可以写一样
如果只导出文件而不导入数据到目的数据库,目的数据连接除type其它项可以任意
2.type要求填写sqlserver、mysql、oracle、db2、postgresql
driver填写jdbc driver
url、username、password填写连接数据库参数
schema在oracle、sqlserver中理解为用户名、mysql中为database、postgresql为模式
charset填写数据库字符集,例如:utf-8、iso-8859-1、gb2312等,可以不填写(空白),也可以不选择这项.不填写或者不选择都不处理.
3.commit_rows为导入过程中每张表每次提交的记录数,对于CLOB、BLOB每一次只导入一条记录一个CLOB、BLOB列
4.导入表
4.1导入schema下的所有表,目的数据库没有的表不导入
<tables></tables>
4.2导入部分表,不用考虑表之间的外键关系而按顺序列出,导入过程自动处理
<tables> <table>TEST1</table> <table>TEST2</table> </tables>
4.3导入表的部分数据,where查询条件,不包括where关键字
<table where="COL1=1">TEST1</table>
4.4目的表和源表不同名,列名相同
<table destination="TABLE2"> TABLE1 </table>
4.5目的表和源表不同名,列名也不相同
<table destination="TABLE2">TABLE1 <column destination="">COLUMN1</column><!-- 列名相同 --> <column destination="COLUMN33">COLUMN2</column> <column destination="COLUMN33">COLUMN3</column> </table>
4.6可以在表上设置字符集,只对表有效,适用于mysql表的字符集不同于数据库的字符集的情况.
<table charset="gb2312">TEST1</table>
5.导入过程
编码 | 说明 |
1 | 读取源数据 |
2 | 导入数据 |
4 | 导入CLOB数据 |
8 | 导入BLOB数据 |
16 | 生成导入脚本 |
32 | 生成建库脚本 |
64 TAB分割的文本文件
128 EXCEL文件
其中16sql脚本、64txt文件、128excel文件每一个表一个文件,分别输出到当前目录下的sql、txt、excel目录
32建库脚本,2个文件,create.sql和drop.sql,输出到当前目录下的db目录
可以更改输出目录,在run.bat中修改 JudeForData.exe %LIB_PATH% -Doutput_dir=D:\data
输出excel文件采用了apache的poi, 为了控制内存溢出的问题,每个excel文件最多输出1万条记录,一个表输出到若干个文件中
程序在不输出excel文件的情况下,消耗内存控制在6M,并且长时间运行也没有问题
输出excel文件时,内存消耗60M左右.
<process>1</process>
process的值为上面编码N项的和(N>=1),其中编码1为必选项
process可能的值有1、3(1+2)、7(1+2+4)、15(1+2+4+8)、5(1+4)、9(1+8)、11(1+2+8)、13(1+4+8)等等