Trnasferencia de dados

1 resposta
S

Boa tarde galera,

Pessoal estou com um problema, é o seguinte preciso pegar registro de um banco de dados SqlServe e transferi -los para o fireBird, o problema é são 45 Mil registro. O problema é que demora muito. E quando faço alteração no SqlServer em apenas uma linhas ele percorre o banco todo e demora muito apenas para atualizar uma linha.

Gostaria de saber se não existe uma forma de inserir no banco de uma vez todos os registro, porque ele percorre linha por linha acho que esse é o motivo da demora. Se puderem me ajudar fico grato.

Usando JDBC.

1 Resposta

willesreis

Olá SouthBYLucXD!

É possível fazer, mas como pre-requisito, o tipo de dados dos campos da tabela precisam ser semelhantes entre ambas as tabelas dos banco de dados e adicionar ao CLASSPATH do projeto, as APIs JDBC do SQLServer e do Firebird.
A rotina para migração dos dados poderia ser feito da seguinte maneira:
[list]Criar um Bean representando a estrutura da tabela;[/list]

/* imports omitidos */
public class NomeTabela {
    private int nomeCampo1;
    private String nomeCampo2;
    private Double nomeCampo3;
    /* getters e setters omitidos */
}

[list]Fazer a conexão JDBC com o SQLServer;[/list]

Class.forName("classe_JDBC_SQLServer");
        Connection conn = DriverManager.getConnection("urlSQLServer", "userSQLServer", "pwdSQLServer");
        Statement stm = conn.createStatement();

[list]Recuperar os dados da tabela e guardá-lo em uma Collection do Bean criado;[/list]

List<NomeBean> lista = new ArrayList<NomeBean>();
        ResultSet rs = stm.executeQuery("SELECT * FROM NomeTabela");
        while (rs.next()) {
            NomeBean bean = new NomeBean(rs.getInt("nomeCampo1"),rs.getInt("nomeCampo2"),rs.getInt("nomeCampo3"));
            lista.add(bean);
        }

[list]Fazer a conexão JDBC com o Firebird;[/list]

Class.forName("classe_JDBC_Firebird");
        Connection conn2 = DriverManager.getConnection("urlFirebird", "userFirebird", "pwdFirebird");
        Statement stm2 = conn2.createStatement();

[list]Inserir os dados na tabela do Firebird com os dados guardados na Collection.[/list]

for (NomeBean nb : lista) {
            executeUpdate("INSERT INTO NomeTabela(nomeCampo1,nomeCampo2,nomeCampo3) VALUES("+nb.getNomeCampo1()+",'"+nb.getNomeCampo2()+"',"+nb.getNomeCampo3()+")");
        }

Rotina completa:

// método principal da classe que fará a tarefa de migração de dados
public void main(String[] args) {

    try {
        Class.forName("classe_JDBC_SQLServer");
        Connection conn = DriverManager.getConnection("urlSQLServer", "userSQLServer", "pwdSQLServer");
        Statement stm = conn.createStatement();

        List<NomeBean> lista = new ArrayList<NomeBean>();
        ResultSet rs = stm.executeQuery("SELECT * FROM NomeTabela");
        while (rs.next()) {
            NomeBean bean = new NomeBean(rs.getInt("nomeCampo1"),rs.getInt("nomeCampo2"),rs.getInt("nomeCampo3"));
            lista.add(bean);
        }
        
        rs.close();
        stm.close();
        conn.close();

        Class.forName("classe_JDBC_Firebird");
        Connection conn2 = DriverManager.getConnection("urlFirebird", "userFirebird", "pwdFirebird");
        Statement stm2 = conn2.createStatement();

        for (NomeBean nb : lista) {
            executeUpdate("INSERT INTO NomeTabela(nomeCampo1,nomeCampo2,nomeCampo3) VALUES("+nb.getNomeCampo1()+",'"+nb.getNomeCampo2()+"',"+nb.getNomeCampo3()+")");
        }
        
        stm2.close();
        conn2.close();
        
    } catch(Exception e) {}
}

Boa sorte!

Willes

Criado 31 de março de 2012
Ultima resposta 31 de mar. de 2012
Respostas 1
Participantes 2