数据源拒绝建立连接java

时间:2017-04-12 19:40:40

标签: java mysql ajax servlets

错误:

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.NullPointerException

我通过servlet中的ajax请求一些信息。

代码:

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();
}

连接:

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;
}

用户每次点击按钮然后请求由ajax执行时都会发出请求。我的servlet响应更多新信息。对此servlet的第一次请求工作正常,但第二次输出该异常。

PreparedStatement ps = con.prepareStatement(query);

抛出异常

基于我的谷歌搜索,我发现这基本上是由于连接泄漏,可以通过重新启动MySql服务器或更改它的端口号来修复。但这对我没用。

1 个答案:

答案 0 :(得分:0)

错误"连接太多"表示已达到打开连接的数据库限制。一种解决方案可能是配置数据库允许的最大连接数。

可能更优选的是在使用它们之后正确地关闭连接。这可以在try ... finally块中安全地完成,如下所示:

Connection con;
try {
    con = Database.getcon();
} finally {
    if (con != null) {
        con.close();
    }
}

Connection实现AutoClosable时,自Java7以来可以通过try-with-resources简化:

try (Connection con = Database.getcon()) {
    // implementation
}

关闭连接会处理其他JDBC资源以及JavaDoc状态:

  

立即释放此Connection对象的数据库和JDBC资源,而不是等待它们自动释放。