错误:
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服务器或更改它的端口号来修复。但这对我没用。
答案 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资源,而不是等待它们自动释放。