Access数据迁移到Oracle的java代码(一)

2014-11-24 09:19:29 · 作者: · 浏览: 0
项目比较紧张,写了一个小工具,目的是能够快速的将Access的数据迁移到Oracle平台下,没有重构,没有优化,纯原生态,估计会有各种错误,但是基本的思路在。
1)需要配置Access的数据源
2)需要导入Oracle支持的jar包
3)需要将代码中的statement修改为preparedstatement
4)需要将代码进行重构,更容易维护
5)需要导入pinyin4j的jar包,以为在Access里面有列名是汉字
如下:
[java]
package com.yinhai.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;

public class AccessToOracleSql {

// Access的数据源配置
public static String urlAccess = "jdbc:odbc:jgyl";
public static String usrAccess = "admin";
public static String pwdAccess = "xxxxx";

// Oracle的配置
public static String urlOracle = "jdbc:oracle:thin:@10.62.xxx.xxx:1521:xxxx2";
public static String usrOracle = "chenzw";
public static String pwdOracle = "chenzw";

// 常量
public static final int CONNECTION_ORACLE = 1;
public static final int CONNECTION_ACCESS = 0;

// access中需要迁移的表名

public static String accessTables = "00C'C00^01C'C01^1997C'JF1997^1998C'JF1998^1999C'JF1999^2000C'JF2000^" +
"2001年表C'JF2001^2002缴费表'JF2002^2003缴费表'JF2003^2004缴费表'JF2004^2005缴费表'JF2005^2006缴费表'JF2006^" +
"2007缴费表'JF2007^2008缴费表'JF2008^2009缴费表'JF2009^2009缴费表(备份)'JF2009BAK^2010缴费表'JF2010^" +
"2011缴费表'JF2011^2012缴费表'JF2012^97C'C97^98C'C98^99C'C99^" +
"单位表'DANWEIBIAO^缴费转移记录'JFZYJL^失业缴费'SYJF^养老缴费表'YLJF^员工名单'YGMD^粘贴错误'ZTCW^转入人员历史缴费'ZRRYLSJF";


// typeAccessToOracle
public static String typeAccessToOracle = "COUNTER'NUMBER(10)^VARCHAR'VARCHAR2(300)^DOUBLE'NUMBER(10,4)^"
+ "BIT'NUMBER(4)^REAL'NUMBER(10,4)^INTEGER'NUMBER(10,4)^DATETIME'VARCHAR2(20)";

public static Map oracleTableFromAccess;
// 加载驱动
static {
oracleTableFromAccess = AccessToOracleSql.transStringToMap(accessTables);
String driver_Access = "sun.jdbc.odbc.JdbcOdbcDriver";
String driver_Oracle = "oracle.jdbc.driver.OracleDriver";
try {
Class.forName(driver_Access);
Class.forName(driver_Oracle);
} catch (Exception e) {
e.printStackTrace();
}
}

// 获得连接
public static Connection getConnection(int connectType) {
Connection con = null;
try {
switch (connectType) {
case 0:
con = DriverManager.getConnection(urlAccess, usrAccess,
pwdAccess);
break;
case 1:
con = DriverManager.getConnection(urlOracle, usrOracle,
pwdOracle);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return con;
}

// 得到Oracle的建表语句
public static Map getOracleSql(ResultSet resultSet, String TableName) {
Map resultMap = new HashMap();
Map transColNameMap = new HashMap();
try {
Map map = transStringToMap(typeAccessToOracle);