Java Glassfish不重用JDBC连接
我正在glassfish Web服务器上使用JDBC连接池。我通过以下语句注入数据源:Java Glassfish不重用JDBC连接,java,jdbc,glassfish,pooling,Java,Jdbc,Glassfish,Pooling,我正在glassfish Web服务器上使用JDBC连接池。我通过以下语句注入数据源: @Resource(lookup="database") DataSource db; 我用来加载数据的代码如下所示: public ArrayList<Stuff> loadStuff()throws SQLException{ PreparedStatement ps = db.getConnection().prepareStatement("Select * from stuff
@Resource(lookup="database")
DataSource db;
我用来加载数据的代码如下所示:
public ArrayList<Stuff> loadStuff()throws SQLException{
PreparedStatement ps = db.getConnection().prepareStatement("Select * from stufftable");
ResultSet rs = ps.executeQuery();
ArrayList<Stuff> stuffs= new ArrayList<Stuff>();
if(rs.next()){
Stuff stuff = new Stuff();
stuff.setString1(rs.getString("string1"));
stuff.setString1(rs.getString("string1"));
stuffs.add(stuff );
}
return stuffs;
}
public ArrayList loadStuff()抛出SQLException{
PreparedStatement ps=db.getConnection().prepareStatement(“从stufftable中选择*);
结果集rs=ps.executeQuery();
ArrayList stuffs=新的ArrayList();
如果(rs.next()){
东西=新东西();
stuff.setString1(rs.getString(“string1”);
stuff.setString1(rs.getString(“string1”);
填充。添加(填充);
}
归还物品;
}
出于某种原因,glassfish没有重用数据库连接,所以我很快就用完了。
我迟早会遇到这样的错误:分配连接时出错。原因:正在使用的连接等于最大池大小和过期的最大等待时间。无法分配更多连接。
正如我对glassfish上池的概念所理解的那样:我不应该在使用连接后关闭它们,因此其他东西可以在需要时重用连接。当不再需要连接时,Glassfish会关闭连接本身
为什么我的程序每次都打开一个新连接?当我完成连接时,我必须对连接做些什么吗?您仍然需要调用
connection.close()
。您的池将管理您的连接,因此它们不会真正关闭,但如果您不在代码中“关闭”它们,它们将不会返回到池中
编辑:或者,使用资源进行尝试:
您仍然需要调用
Connection.close()
。您的池将管理您的连接,因此它们不会真正关闭,但如果您不在代码中“关闭”它们,它们将不会返回到池中
编辑:或者,使用资源进行尝试:
您仍然需要调用
Connection.close()
。您的池将管理您的连接,因此它们不会真正关闭,但如果您不在代码中“关闭”它们,它们将不会返回到池中
编辑:或者,使用资源进行尝试:
您仍然需要调用
Connection.close()
。您的池将管理您的连接,因此它们不会真正关闭,但如果您不在代码中“关闭”它们,它们将不会返回到池中
编辑:或者,使用资源进行尝试:
尝试使用资源是否会在连接完成后自动关闭连接?当抛出异常并且必须中止时,它是否也会关闭资源?另外一个问题:我已经试着阅读了它,显然有一种叫做抑制异常的东西,我真的不明白。在使用资源进行的尝试中是否仍会引发异常?使用资源进行的尝试是否会在完成时自动关闭连接?当抛出异常并且必须中止时,它是否也会关闭资源?另外一个问题:我已经试着阅读了它,显然有一种叫做抑制异常的东西,我真的不明白。在使用资源进行的尝试中是否仍会引发异常?使用资源进行的尝试是否会在完成时自动关闭连接?当抛出异常并且必须中止时,它是否也会关闭资源?另外一个问题:我已经试着阅读了它,显然有一种叫做抑制异常的东西,我真的不明白。在使用资源进行的尝试中是否仍会引发异常?使用资源进行的尝试是否会在完成时自动关闭连接?当抛出异常并且必须中止时,它是否也会关闭资源?另外一个问题:我已经试着阅读了它,显然有一种叫做抑制异常的东西,我真的不明白。在使用资源进行的尝试中是否仍会抛出异常?
Connection con = db.getConnection();
try {
PreparedStatement ps = con.prepareStatement("Select * from stufftable");
...
} finally {
// this returns the connection to the pool
con.close();
}