Error:
Data source rejected establishment of connection, message from server: "Too many connections" couldn't connect! Apr 14, 2017 10:19:02 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [duck.reg.pack.pstcmttc] in context with path [/Duck] threw exception java.lang.NullPointerExceptionEstoy solicitando información a través de ajax de un servlet.
Código:
String UDD = null; try { DBConnect Database = new DBConnect(); Connection con = Database.getcon(); String query="SELECT UDD FROM userS WHERE UID=?;"; PreparedStatement ps = con.prepareStatement(query); ps.setString(1, UID); ResultSet rs=ps.executeQuery(); if(rs.next()){ UDD=rs.getString(1); } ps.close(); rs.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); }Conexión:
public DBConnect(){ try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:10021/db?useSSL=false", "root", "PASSWORD"); st = con.createStatement(); }catch(Exception ex){ System.out.println(ex.getMessage()); System.out.println("couldn't connect!"); } } public Connection getcon(){ DBConnect condb = new DBConnect(); Connection connect = con; return con; }El usuario realiza la solicitud cada vez que hace clic en un botón y luego ajax realiza la solicitud. Mi servlet responde con más información nueva. La primera solicitud realizada a este servlet funciona bien, pero la segunda vez genera esa excepción.
La excepción se lanza en la línea PreparedStatement ps = con.prepareStatement(query);
Según mi búsqueda en Google, descubrí que esto básicamente se debe a una fuga de conexión y podría solucionarse reiniciando el servidor MySql o cambiando su número de puerto. Pero eso no funcionó para mí.
El error "Demasiadas conexiones" indica que se ha alcanzado el límite de la base de datos de conexiones abiertas. Una solución podría ser configurar el máximo de conexiones permitidas en la base de datos.
Probablemente sería más preferible cerrar correctamente las conexiones después de haberlas usado. Esto se puede hacer de forma segura en un intento... finalmente bloquear de la siguiente manera:
Connection con; try { con = Database.getcon(); } finally { if (con != null) { con.close(); } } Como Connection implementa AutoClosable , esto se puede simplificar a través de probar con recursos desde Java7:
try (Connection con = Database.getcon()) { // implementation }Cerrar la conexión se ocupa de otros recursos de JDBC, así como de los estados de JavaDoc:
Libera la base de datos de este objeto
Connectiony los recursos JDBC inmediatamente en lugar de esperar a que se liberen automáticamente.