package com.ibm.db;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import oracle.jdbc.driver.OracleDriver;
public class InsertAS400RecordToOracle {
public static void main(String[] args) {
ResultSet rs = getRecordFromAS400(args[0]); // get record from AS400
try {
while (rs.next()) {
List<Map<String, String>> list = convertList(rs);
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取行的数量
insertRecordIntoOracle(args[0], columnCount, list); // insert record to oracle
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static ResultSet getRecordFromAS400(String tableName) {
String SqlStmt = "SELECT * FROM " + tableName;
Connection dbConnect = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
String url = "jdbc:as400://192.188.4.173/XXX;naming=system;errors=full";
String user = "XXX";
String pwd = "XXX";
dbConnect = java.sql.DriverManager.getConnection(url, user, pwd);
stmt = dbConnect.createStatement();
rs = stmt.executeQuery(SqlStmt);
} catch (Exception exc) {
exc.printStackTrace();
} finally {
}
return rs;
}
private static ResultSet insertRecordIntoOracle(String tableName, int columnCount, List<Map<String, String>> list) {
Connection connect = null;
Statement stmt = null;
ResultSet rs = null;
PreparedStatement ps;
StringBuffer sb = new StringBuffer();
sb.append(" VALUES (");
for(int i = 1; i <= columnCount; i++) {
if(i < columnCount) {
sb.append(" ?,");
}else {
sb.append(" ?)");
}
}
String sqlstr = "insert into " + tableName + sb.toString();
try {
Driver driver = new OracleDriver();
DriverManager.deregisterDriver(driver);
Properties pro = new Properties();
pro.put("user", "XXX");
pro.put("password", "XXX");
connect = driver.connect("jdbc:oracle:thin:@192.168.6.136:1521/ORCL", pro);
ps = connect.prepareStatement(sqlstr);
for(int j = 0; j < list.size(); j++) {
Iterator<?> iter = list.get(j).entrySet().iterator();
int i = 1;
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
ps.setString(i, val.toString());
i++;
}
ps.executeUpdate();
}
System.out.println("jjk插入完毕!!!");
} catch (Exception exc) {
exc.printStackTrace();
} finally {
try {
if (stmt != null)
stmt.close();
connect.close();
if (connect != null)
connect.close();
} catch (Exception exc) {
}
}
return rs;
}
public static List<Map<String, String>> convertList(ResultSet rs) throws SQLException{
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取行的数量
while (rs.next()) {
Map<String, String> rowData = new HashMap<String, String>();//声明Map
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i).toString());//获取键名及值
}
list.add(rowData);
}
return list;
}
}