package DataTransfer;import java.sql.*;
import java.lang.Exception;
import java.util.ArrayList;
import java.util.List;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: networksh</p>
 * @author duantang
 * @version 1.0
 */public class DataOperating {
    public DataOperating() {
    }    /*
     *   根据用户提供的Oracle数据库的ip,用户名,密码进行数据库的连接
     *   从oracle数据库表中提取全部记录
     *   返回类型:ArrayList
     */
    public List EduceFormOracle(String ip, String sUsr, String sPwd,
                                String table) throws Exception {
        List queryResult = new ArrayList();
        List recordLine = new ArrayList();
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@" +
            ip + ":1521:ORCL", sUsr, sPwd);
        Statement stmt = con.createStatement();
        String sql = "select * from " + table;
        ResultSet rs = stmt.executeQuery(sql);        ResultSetMetaData rsmd = rs.getMetaData();
        int numCols = rsmd.getColumnCount();
        boolean more = rs.next();
        while (more) {
            for (int i = 1; i <= numCols; i++) {
                recordLine.add(rs.getObject(i));
            }
            queryResult.add(recordLine);
            more = rs.next();
        }        rs.close();
        stmt.close();
        con.close();        return queryResult;    }    /*
     *   根据用户提供的MySql数据库的ip,用户名,密码进行数据库的连接
     *   把ResultSet结果集插入到MySql数据库中
     *   无返回值
     */    public void InsertToMysql(String ip, String sUsr, String sPwd,
                              List rs, String table) throws Exception {
        Class.forName("org.gjt.mm.mysql.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://" + ip +
            ":3306/myDatabaseName", sUsr, sPwd);
        Statement stmt = con.createStatement();//        Object[] array = new Object[rs.size()];
//       rs.toArray(array);
        for (int i = 0; i < rs.size(); i++) {
            List recordLine = (List) rs.get(i);
            String V0 = (String) recordLine.get(0);
            String V1 = (String) recordLine.get(1);
            String V2 = (String) recordLine.get(2);
            String V3 = (String) recordLine.get(3);
            String V4 = (String) recordLine.get(4);
            String sql = "insert into" + table + "( T1, T2, T3, T4, T5) VALUES ("+V0+","+ V1+","+ V2+","+ V3+","+ V4+")";
            stmt.executeUpdate(sql);
        }
        stmt.close();
        con.close();    }
}

解决方案 »

  1.   

    以上是我写的两个接口,就如楼上所说,一个取数据,一个存数据,单总觉得很繁琐,据说用JMX可以很好解决此类问题,有没有人知道呀?还有呀,对于我写的第二个方法里面的循环部分,有没有高人有更好的办法没有?我感觉是不得已之计!多谢参与!
      

  2.   

    string v0 = rs.getstring(0)
      

  3.   

    Oracle定时导出记录到XML文件,MySQL定时导入。
      

  4.   

    草拟一份伪代码:public abstract class Migrator {    //取得源库的数据库连接
        public abstract Connection getSrcConnection();    //取得目的库的数据库连接
        public abstract Connection getDestConnection();    //从源库取一条记录
        public abstract SampleBean loadRecord(Connection conn, long id)
                throws SQLException;    //写一条记录到目的库
        public abstract boolean writeRecord(Connection conn, SampleBean bean)
                throws SQLException;    //取批量任务
        public abstract long[] loadTasks(Connection conn) throws SQLException;    //执行批量移库任务
        public int migrate(long[] recordIDs) throws SQLException {
            int cnt = 0;
            for (int i = 0; i < recordIDs.length; i++) {
                long recordID = recordIDs[i];            Connection src_conn = getSrcConnection();
                try {
                    SampleBean bean = loadRecord(src_conn, recordID);
                    if (bean != null) {
                        Connection dest_conn = getSrcConnection();
                        try {
                            boolean rt = writeRecord(dest_conn, bean);                        if (rt) {
                                cnt++;
                                //TODO: other thing
                            } else {
                                //TODO: other thing
                            }                    } finally {
                            try {
                                dest_conn.close();
                            } catch (SQLException e) {
                                //ignore or record this
                            }
                        }
                    }
                } finally {
                    try {
                        src_conn.close();
                    } catch (SQLException e) {
                        //ignore or record this
                    }
                }
            }        return cnt;
        }}