gpt4 book ai didi

java - 为什么每次操作后数据库连接都会关闭

转载 作者:行者123 更新时间:2023-12-01 15:27:44 25 4
gpt4 key购买 nike

我在 TOmcat 6 中使用连接池,并且我已在 context.xml 文件中以这种方式进行配置

<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:ORCLE"
username="scott" password="tiger" maxActive="20" maxIdle="10"
maxWait="-1"/>

这是我的工厂类,用于使用数据源获取连接

public class ConnPoolFactory {
private static DataSource dataSource;
private static Connection connection;

private ConnPoolFactory() {
}

public static synchronized Connection getConnection() throws SQLException {

try {

if (connection == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext
.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/myoracle");
connection = dataSource.getConnection();
} else {
return connection;
}

} catch (NamingException e) {
e.printStackTrace();
}

return connection;

}
}

从我的 servlet 中的 finally block 中,我以这种方式关闭它

try {

connection = ConnPoolFactory.getConnection();
finally

{

if(conn!=null)
con.close();
}

从我的用户界面中,我可以发出不同的命令(按下按钮),例如插入、更新、删除、选择 --。

我面临的问题是,应用程序仅针对一个命令运行,也就是说,例如,如果我单击“插入”按钮,它会很好地插入记录,之后,如果我再次发出任何命令,则会出现异常在服务器控制台上显示“连接已关闭”。

如果我删除 servlet 中的finally block 代码,那么应用程序对于任意数量的命令都可以正常运行

有人可以告诉我那个 finnaly block 出了什么问题吗?

最佳答案

Connection变量 ConnPoolFactory应该是方法本地的,而不是静态的。您应该测试 null 的变量不是 connection但是dataSource 。一旦获得非空值,就返回 dataSource.getConnection() 。调用者应该在完成连接后关闭该连接。

关于java - 为什么每次操作后数据库连接都会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966729/

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