gpt4 book ai didi

java - JSF 页面在多次重新加载时卡住

转载 作者:行者123 更新时间:2023-12-02 00:28:18 24 4
gpt4 key购买 nike

我使用此代码从数据库表中获取数据。

public List<Dashboard> getDashboardList() throws SQLException {

if (ds == null) {
throw new SQLException("Can't get data source");
}

//get database connection
Connection con = ds.getConnection();

if (con == null) {
throw new SQLException("Can't get database connection");
}

PreparedStatement ps = con.prepareStatement(
"SELECT * from GLOBALSETTINGS");

//get customer data from database
ResultSet result = ps.executeQuery();

List<Dashboard> list = new ArrayList<Dashboard>();

while (result.next()) {
Dashboard cust = new Dashboard();

cust.setUser(result.getString("SessionTTL"));
cust.setPassword(result.getString("MAXACTIVEUSERS"));


//store all data into a List
list.add(cust);
}

return list;
}

此代码是部署在 glassfish 服务器上的 JSF 页面的一部分。问题是,当我多次重新加载 JSF 页面(大约 8 次)时,网页会卡住。我怀疑线程池已满,没有空间用于新连接。我该如何解决这个问题?查询完成后关闭连接还是有其他方法?

最美好的祝愿

最佳答案

首先:是的,完成后您应该通过显式调用 close() 方法来关闭连接。关闭连接将释放数据库资源。

更新:您还应该关闭PreparedStatement(使用close())。我还建议在您的方法中处理 SQLException,而不是抛出它,因为即使发生异常,您也需要确保语句和连接已关闭。

类似这样的事情:

Connection connection = dataSource.getConnection();
try {
PreparedStatement statement = connection.prepareStatement();
try {
// Work with the statement
catch (SQLException e ) {
// Handle exceptions
} catch (SQLException e {
// Handle exceptions
} finally {
statement.close();
}
} finally {
connection.close();
}

此外,您不应该在 bean 字段的 getter 方法中查询数据库。在每个请求期间可以多次调用 Getter。更优雅的方法是在 bean 的构造函数或 @PostConstruct 中准备 DashboardList。

关于java - JSF 页面在多次重新加载时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com