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.
[code] 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);
}
}[/code]
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 )
Melhorou, ficou mais rapido mesmo muito obrigado
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
[code]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;
}
}
}[/code]
set e get…
[code]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;
}
}[/code]