你的数据库连接每次使用完毕用conn.close()方法关闭,连接数就不会满了。对于rs&stmt最好也用相同方法关闭。关于第二个问题,不同的数据库产品是会与区别的,具体就要靠自己去调试了。
解决方案 »
- ftl页面问题
- 新手求关于jsp随机数问题
- 程序求解释
- liferay sso 单点登录功能
- Windows下读取正常,Linux下读取文件出现乱码
- 请问这是个什么错误?急!!!(80)
- 请教,我的这段下载文件的代码该如何修改?
- 简单问题:<% include file="test.jsp"%>可以传参数码?怎么传?
- ssh框架,ajax请求后台,后台怎么给返回json对象(不是json数据)
- zuul网关验证token的时候没有进入filter直接抛出invalid token异常
- jsp能否与服务器端的其他进程进行交互?
- 输入http://localhost:8080显示欢迎页面但无法显示JSP页面
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
Context env = (Context) new InitialContext().lookup("java:comp/env");
DataSource source = (DataSource) env.lookup("jdbc/test");
Connection conn = source.getConnection();
ResultSet rs = null;
Statement stmt = null;
stmt = conn.createStatement();
String sql = "select * from user";
rs = stmt.executeQuery(sql);
while(rs.next())
out.println(rs.getString("User") + "<br>");
rs.close();//加上
%>
Connection由DbConnectionManager.getConnection()提供,这个没有问题。
DbManager Class部分代码如下:public class DbManager
{
public static ResultSet executeQuery(String sqlStatement) throws Exception
{
ResultSet resultSet = null;
Connection conn =null;
try
{ conn = DbConnectionManager.getConnection(); Statement statement = conn.createStatement();
resultSet = statement.executeQuery(sqlStatement);
// statement.close();
} catch(Exception e)
{
System.out.println("SQLHome.executeQuery: " + e.getMessage());
// throw(e);
} finally
{
if(conn!= null)
{
try
{
conn.close();
}
catch(Exception e)
{
System.out.println("SQLHome.executeQuery - release connection: " + e.getMessage());
//throw(e);
}
}
}
return resultSet;
}
}为了回收连接池的连接,在代码后面加了finally的代码,将conn关闭,但是随着conn的关闭,resultSet的数据也随之丢失,但是如果要保证resultSet有数据,又不能在这里conn.close(),刷新几下就超过了连接池的最大连接数了。
为了保证整个DbManager的可控性、完整性、独立性,希望把conn.close()也放在这个类里。
各位有什么好的解决方法呢?conn.close()该写在哪里呢?
然后,每次while(rs.next()){
out.println(rs.getString("User") + "<br>");
...
....
}
DbManager.conn.close()
就ok了;
这个方法是没有办法才使用的方法了,:(我想能否让它自己关闭呢?