我正在PostgreSQL 9.1中使用数据库,该数据库中的条目连续来自另一个程序。我正在6秒后从Ajax发送请求以获取最新条目.tomcat输出窗口显示异常—
Arval SQLException: FATAL: sorry, too many clients already
之后程序也可以正常工作。当我通过查询检查我的postgres时-
select count(*) from pg_stat_activity;
它表明连接不断增加,但是在每个请求之后我都关闭了连接。我正在使用netbeans和struts 1.3。
long previousSNO = Long.parseLong(request.getParameter("previousSNO")); if(previousSNO == 0) { sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp ORDER BY search_date DESC LIMIT 20"); prest = cb.executeSQLQuery(sb.toString()); rs = prest.executeQuery(); } else { sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp WHERE sno > ? ORDER BY search_date DESC"); prest = cb.executeSQLQuery(sb.toString()); prest.setLong(1, previousSNO); rs = prest.executeQuery(); } rs.last(); int c = rs.getRow(); rs.beforeFirst(); if(rs!=null && c>0) { //code for making json resultsb from resultset here rs.close(); } cb.closeConnection(); response.setContentType("text/plain"); response.getWriter().print(resultsb.toString());
//连接bean中的关闭方法是
public void closeConnection() { try { // st.close(); conn.close(); System.out.println("con is closed"); conn = null; } catch (SQLException e) { e.getMessage(); System.out.println(e.getMessage()); System.out.println("con is not closed"); } }
每次在控制台“ con上关闭”打印时;
您可以在postgres中增加max_connections,但这不是解决方案。您有资源泄漏。可以是任何-连接未关闭,结果集未关闭。请返回并检查代码。
考虑使用连接池库
关于连接池的一般讨论在这里 (感谢@ sinisa229 mihajlovski)