Problemas com o MYSQL - JDBC

olá, possuo uma aplicação que utiliza MYSQL e conexão atraves da JDBC do MySQL.

Bom quando vou fazer um insert numa tabela do bd (é a importação de 23.000 registros) quando chega perto do registro 4.000 ele dá a seguinte mensagem de erro. O insert dos dados é feito um por um, não sei se isso pode ser o problema?

[quote]com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.BindException: Address already in use: connect

STACKTRACE:

java.net.SocketException: java.net.BindException: Address already in use: connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2555)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at bd.banco.getConnection(banco.java:70)
at bd.insert.insere(insert.java:30)
at importacao.importa_tim.run(importa_tim.java:275)
at java.lang.Thread.run(Thread.java:595)

** END NESTED EXCEPTION **

Last packet sent to the server was 17 ms ago.
[/quote]

Agradeço a ajuda desde já.
Guilherme

Não será porque você está criando conexões demais?

vc está usando alguma pool de conexoes?
vc disse q. faz a inserção dos registros um a um…por acaso vc estaria abrindo uma conexão para cada inserção?

t+

Cara, acho que não, dá uma olhada na minha classe que faz a conexão com o BD para insert’s

[code]package bd;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
*

  • @author KIKO
    */
    public class insert {

    /** Creates a new instance of insert */
    public insert() {
    }
    public static void insere(String sql) throws SQLException{
    try {
    banco.init();
    Connection conn = banco.getConnection();
    Statement stat = conn.createStatement();
    stat.execute(sql);
    conn.close();
    stat.close();
    } catch (IOException ex) {
    ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
    ex.printStackTrace();
    }
    }
    }[/code]

Ele abre a conexão, faz o insert e fecha a conexão.

Tem alguma sugestão para melhorar o codigo?

Sugiro isso:

Como são varias inserções idênticas, eu sugiro o uso de PreparedStatement, pois ele compila a expressão, tornando a execução mais rápida e menos custosa. E use uma conexão só também.

Não sei que tipo de objeto você está inserindo, mas suponhamos que sejam usuários, com nome, login e senha.

Ex.:

[code]public class UsuarioDAO{

public void inserir&#40;List&lt;Usuario&gt; usuarios&#41; throws SQLException &#123;
     try &#123;
        banco.init&#40;&#41;;
        Connection conn = banco.getConnection&#40;&#41;;
        PreparedStatement stmt = conn.prepareStatement&#40;&quot;INSERT INTO usuario&#40;nome, login, senha&#41; VALUES &#40;?, ?, ?&#41;&quot;&#41;;

        for&#40;Usuario usu &#58; usuarios&#41;&#123;
           stmt.clearParameters&#40;&#41;;
           stmt.setString&#40;1, usu.getNome&#40;&#41;&#41;;
           stmt.setString&#40;2, usu.getLogin&#40;&#41;&#41;;
           stmt.setString&#40;3, usu.getSenha&#40;&#41;&#41;;
           stmt.executeUpdate&#40;&#41;;
        &#125;
        conn.close&#40;&#41;;
        stat.close&#40;&#41;;
    &#125; catch &#40;IOException ex&#41; &#123;
        ex.printStackTrace&#40;&#41;;
    &#125; catch &#40;ClassNotFoundException ex&#41; &#123;
        ex.printStackTrace&#40;&#41;;
    &#125;
&#125;

}[/code]

Voce pode receber um Connection nos parametros do método, aí voce abre fora dele, e não precisa abrir repetidas vezes…
algo como:

public static void insere&#40;String sql, Connection conn&#41; &#123;
  //sua implementaçao
&#125;

//voce usaria assim&#58;
Connection conn = //pega conexao
for&#40;...&#41; &#123; //faz seu loop
  insere&#40;suasql, conn&#41;;
&#125;

Obrigado, vou testar essas dicas, qualquer coisa volto a escrever.

Obrigado novamente pela ajuda, acho que agora vai funcionar.