2

あるスキーマからデータを引き出し、新しいスキーマに合わせてデータを再構築し、新しいスキーマを使用して新しいデータベースにデータを挿入するプログラムを作成しています。問題は、私のテスト コードでは、最後のレコードが新しいデータベースに挿入されていないことです。

以下のコードの大幅に簡略化されたバージョンを同封していますが、それでも問題が再現されます。レコードセット内のすべてのレコードが宛先データベースに挿入されるように、以下を修正する方法を誰かに教えてもらえますか? 現在、以下は system.out.println の最後のレコードを正しく出力しますが、その最後のレコードはその後宛先テーブルに存在しません:

static void migrateDataTest(){
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection sourceConn = DriverManager.getConnection("jdbc:odbc:source_data_test");
        Statement st = sourceConn.createStatement();
        Connection destinationConn = DriverManager.getConnection("jdbc:odbc:receive_data_test");
        int ClientNumber; String ClientsLastName; String ClientsFirstName;
        ResultSet rest = st.executeQuery("SELECT ClientNumber, ClientsLastName, ClientsFirstName FROM sourceTable");
        PreparedStatement ps5 = null;
        while(rest.next()){
            ClientNumber = rest.getInt(1);
            ClientsLastName = rest.getString(2);
            ClientsFirstName = rest.getString(3);
            System.out.println(ClientNumber+", "+ClientsLastName+", "+ClientsFirstName);
            ps5 = destinationConn.prepareStatement(
                "INSERT INTO destinationTable ("
                + "ClientNumber, FirstName, LastName) VALUES (?, ?, ?)"
            );
            ps5.setInt(1, ClientNumber);
            ps5.setString(2, ClientsFirstName);
            ps5.setString(3, ClientsLastName);
            ps5.executeUpdate();
            destinationConn.commit();
        }
        ps5.close();
    }
catch (ClassNotFoundException cnfe){cnfe.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
}  

編集:

Lokesh の要求に従って、このエラーを作成するコード ブロック全体を以下に示します。もう一度実行して、system.out.println のレコード 30 を印刷していることを確認しましたが、宛先テーブルにはレコード番号 30 が含まれていません。スキップされたレコードが system.out.println で印刷されているという事実により、以下のコードにエラーが含まれていると思われます。

static void migrateDataTest(){
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection sourceConn = DriverManager.getConnection("jdbc:odbc:source_test");
        Statement st = sourceConn.createStatement();
        Connection destinationConn = DriverManager.getConnection("jdbc:odbc:receive_data_test");
        int ClientNumber;
        String ClientsLastName;
        String ClientsFirstName;
        String ClientsMiddleInitial;
        Date DOB;
        int GenderNumber;
        int RaceNumber;
        ResultSet rest = st.executeQuery("SELECT ClientNumber, ClientsLastName, ClientsFirstName, ClientsMiddleInitial, DOB, GenderNumber, RaceNumber FROM sourceTable");
        PreparedStatement ps5 = null;
        while(rest.next()){
            ClientNumber = rest.getInt(1);
            ClientsLastName = rest.getString(2);
            ClientsFirstName = rest.getString(3);
            ClientsMiddleInitial = rest.getString(4);
            DOB = rest.getDate(5);
            GenderNumber = rest.getInt(6);
            RaceNumber = rest.getInt(7);
            System.out.println(ClientNumber+", "+ClientsLastName+", "+ClientsFirstName+", "+ClientsMiddleInitial+", "+DOB+", "+GenderNumber+", "+RaceNumber);  
            ps5 = destinationConn.prepareStatement(
                "INSERT INTO destinationTable ("
                + "ClientNumber, FirstName, MiddleInitial, LastName, DOB, GenderNumber, RaceNumber) "
                +"VALUES (?, ?, ?, ?, ?, ?, ?)"
            );
            ps5.setInt(1, ClientNumber);
            ps5.setString(2, ClientsFirstName);
            ps5.setString(3, ClientsMiddleInitial);
            ps5.setString(4, ClientsLastName);
            ps5.setDate(5, DOB);
            ps5.setInt(6, GenderNumber);
            ps5.setInt(7, RaceNumber);
            ps5.executeUpdate();
            destinationConn.commit();
        }
        ps5.close();
    }
    catch (ClassNotFoundException cnfe){cnfe.printStackTrace();}
    catch (SQLException e) {e.printStackTrace();}
}
4

1 に答える 1