[RESOLVIDO]Ajuda com método que insere no banco

4 respostas
Viniciustelles

Boa tarde pessoal, bom na verdade é uma duvida e não um problema...
tenho meu método que insere endereços no banco, ele funciona só que tenho muitos registros que vem de um arquivo xml que devem ser carregados em sequencia e mandado para ele inseri. ai que ta, fica muito lento gostaria de saber se alguém sabe uma maneira que possa melhor meu desempenho.

public void insreEnderecos(Endereco end) {
        Connection con = criaConexao();
        String sql = "INSERT INTO tmp_endereco VALUES ( ?,?,?,?,?,?,?,?,? )";
        PreparedStatement ps = null;
        try {
            ps = con.prepareStatement(sql);
            ps.setString(1, end.getLogradouro());
            ps.setString(2, end.getNumero());
            ps.setString(3, end.getBairro());
            ps.setString(4, end.getCodigoMunicipio());
            ps.setString(5, end.getCep());
            ps.setString(6, end.getTipoEndereco());
            ps.setString(7, end.getResideExterior());
            ps.setString(8, end.getComplemento());
            ps.setString(9, end.getCodigoMunicipioResidencia());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            fechaStatement(ps);
            fechaConexao(con);
        }

    }

4 Respostas

E

Você está abrindo e fechando a conexão para cada linha que você insere no banco. Isso é que está gastando seu tempo.

Uma forma boba de você resolver esse problema é passar o Connection como um novo parâmetro para esse método, e abrir a conexão em outro lugar (não se esquecer de fechá-la depois :slight_smile: )

Viniciustelles

Valeu vou testar :smiley:

Viniciustelles

Melhorou, ficou mais rapido mesmo muito obrigado :smiley:

joeltw2010

eu faço assim:

Botão que eu pequei os dados
cor cores = new cor();
    TabCor tacor = new TabCor();
private void BtnPegaActionPerformed(java.awt.event.ActionEvent evt) {
    tacor.setDescricao(TfPega.getText());
        try {
            cores.Inserir(tacor);
        } catch (SQLException ex) {
            Logger.getLogger(JanelinhaXD.class.getName()).log(Level.SEVERE, null, ex);
        }
}
classe que eu uso para mandar a sql:
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class cor extends Conexao{
    public void Inserir(TabCor t) throws SQLException {
        super.conectar();
        String sqlinsert = "insert into cor (descricao) values ('" + t.getDescricao() + "')";
        if (!super.ExecutarCrud(sqlinsert)) {
            JOptionPane.showMessageDialog(null, "erro ao cadastrar cliente");
        } else {
            JOptionPane.showMessageDialog(null, "cadastrado com exito");
        }
        super.fechar();
    }
}

classe que manda pro bd

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexao {

    public Connection con = null; // conexão
    public Statement stm = null; // canal para execução de queryies
    public ResultSet rs = null;

    // conexão com servidor e base de dados
    public boolean conectar() throws SQLException {
        boolean erro = true;
        // registrando classe e driver
        try {
            Class.forName("org.postgresql.Driver");//driver do bd no meu caso postgres
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
            erro = false;
            ex.printStackTrace();
        }
        // realizando conexão
        con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/nome do bd", "seu user do bd", "senha do bd");
        // criando canal para execução de sql
        stm = con.createStatement();
        // retorna resultado da conexão
        return erro;
    }

    public void fechar() {
        try {
            con.close();
            System.out.println("Conexão finalizada!");
        } catch (SQLException onConClose) {
            System.out.println("Houve erro ao fechar a conexão!");
            onConClose.printStackTrace();

        }
    }

public boolean ExecutarCrud(String sql) throws SQLException {
        int erro;
        erro = stm.executeUpdate(sql); //executa sql
        if (erro == 0) { //aponta para primeiro registro da consulta

            return false; // não há registros

        } else {
            return true;
        }

    }
}

set e get...

public class TabCor {

    private int CodCor;
    private String Descricao;

    public int getCodCor() {
        return CodCor;
    }

    public void setCodCor(int CodCor) {
        this.CodCor = CodCor;
    }

    public String getDescricao() {
        return Descricao;
    }

    public void setDescricao(String Descricao) {
        this.Descricao = Descricao;
    }
}
Criado 21 de junho de 2012
Ultima resposta 21 de jun. de 2012
Respostas 4
Participantes 3