Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Glassfish不重用JDBC连接_Java_Jdbc_Glassfish_Pooling - Fatal编程技术网

Java Glassfish不重用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

我正在glassfish Web服务器上使用JDBC连接池。我通过以下语句注入数据源:

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