Olá, Dev’s!
Estou com um problema, que está ocorrendo a cada 15 minutos mais ou menos, e o programa fecha direto.
Estou recebendo este erro:
Erro MySQL: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page
for
the
'ulimit'
command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article
196271
(Q196271).
Aparentemente, é um erro causado por um limitador no número de sockets, porém, nas configs do MySQl, o número de conexões simultâneas estão ilimitadas, está tudo ilimitado, não era para ter limite, creio eu.
Alguém sabe o que pode ser?
Gratidão.
NÃO DEIXE ILIMITADO!!. Isso pode causar problemas em questão de perfomance.
Ao invés de deixar sem limite, tente fechar todo tipo de conexão após fazer alguma consulta, exemplo:
private ConectaBanco conecta = new ConectaBanco();
private void getNome(){
try {
conecta.conexao();
/*
................
Sua lógica aqui
................
*/
} catch (Exception ex){
System.out.println(ex);
} finally {
conecta.desconecta();
}
}
Faça como indicado pelo @rodriguesabner que vc não terá problemas.
Para cada conexão aberta, um recurso do servidor é usado. Se são abertas mais conexões do que o servidor consegue suportar, irá ocorrer travamentos na aplicação e até mesmo no banco de dados. É a mesma ideia de vc abrir vários programas pesados na sua máquina e ela ter pouca memória ram, por exemplo.
Pessoal, boa noite!
Agradeço muito pela ajuda!
Mas então, eu já faço isto, a não ser que esteja fazendo algo errado.
Em todos os códigos em que eu utilizo essa parte de conexão via MySQL utilizo o mesmo código:
Connection con = Main.sql.getConnection();
ResultSet rs = null;
PreparedStatement ps = null;
try {
//Código aqui
} catch (SQLException ex) {
Main.log.erro("Caixa", "carregarPagamentos", ex.getMessage(), true);
} finally {
Main.sql.closeConnection(con, ps, rs);
}
Método getConnection:
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://" + host + ":3306/" + database, usuario, senha);
} catch (ClassNotFoundException | SQLException ex) {
JOptionPane.showMessageDialog(null, "Não foi possível se conectar ao banco de dados!\nVerifique se o WampServer esteja ligado!\nErro: " + ex.getMessage());
System.out.println("Erro MySQL: " + ex.getMessage());
System.exit(0);
}
return null;
}
Método closeConnection:
public static void closeConnection(Connection con) {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
}
}
public static void closeConnection(Connection con, PreparedStatement ps) {
closeConnection(con);
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
}
}
public static void closeConnection(Connection con, PreparedStatement ps, ResultSet rs) {
closeConnection(con, ps);
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
}
}