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

2014-11-24 09:19:29 · 作者: · 浏览: 1
StringBuffer sb = new StringBuffer();
ResultSetMetaData meta = resultSet.getMetaData();
sb.append("create table " + TableName + "(\n");
int cols = meta.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= cols; i++) {
String oracleColName = Pinyin4j.getPinYin(alterNameAddQ(meta.getColumnName(i))).replace("(", "").replace(")", "").replace("%", "");
sb.append(" " + oracleColName + " ");
sb.append(transType(meta.getColumnTypeName(i)));
transColNameMap.put(meta.getColumnName(i),oracleColName);
sb.append(i == cols "\n" : ",\n");
}
break;
}
sb.append(")");
resultMap.put("oracleSql", sb.toString());
resultMap.put("transColNameMap", transColNameMap);
return resultMap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

// 如果第一个字母为数字的话,则在前面加Q
public static String alterNameAddQ(String tableName) {
String beginChar = tableName.substring(0, 1);
if (beginChar.matches("[0-9]")) {
return "Q" + tableName;
}
return tableName;
}

// 关闭连接
public static void close(ResultSet rs, Statement stmt, Connection con) {
try {
if (rs != null)
rs.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (stmt != null)
stmt.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (con != null)
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}

// 转码
public static String transType(String type) {
return (String) transStringToMap(typeAccessToOracle).get(type);
}

/**
* 方法名称:transStringToMap 传入参数:mapString 形如 username'chenziwen^password'1234
* 返回值:Map
*/
public static Map transStringToMap(String mapString) {
Map map = new HashMap();
java.util.StringTokenizer items;
for (StringTokenizer entrys = new StringTokenizer(mapString, "^"); entrys
.hasMoreTokens(); map.put(items.nextToken(), items
.hasMoreTokens() ((Object) (items.nextToken())) : null))
items = new StringTokenizer(entrys.nextToken(), "'");
return map;
}

// 主方法
public static void main(String[] args) throws Exception {
java.util.Map.Entry entry;
for(Iterator iterator = oracleTableFromAccess.entrySet().iterator(); iterator.hasNext();){
entry = (java.util.Map.Entry)iterator.next();
String accessTableName = (String)entry.getKey();
String oracleTableName = (String)entry.getValue();
Connection connAccess = getConnection(AccessToOracleSql.CONNECTION_ACCESS);
Connection connOracle = getConnection(AccessToOracleSql.CONNECTION_ORACLE);
Statement stAccess = connAccess.createStatement(ResultSet.TY