gpt4 book ai didi

java - 为什么我的 Java JDBC 到 Firebird 数据库的连接不会断开?

转载 作者:行者123 更新时间:2023-11-29 04:36:28 26 4
gpt4 key购买 nike

我正在使用以下代码连接到 firebird 数据库

  public static Connection dbStatic;    
...
public void getConnection(){
FBWrappingDataSource DataSource = new FBWrappingDataSource();
DataSource.setDatabase("localhost/3050:C:/MyDatabase.FDB");
DataSource.setDescription("TNS Development Database");
DataSource.setType("TYPE4");
DataSource.setEncoding("ISO8859_1");
DataSource.setLoginTimeout(10);
try {
dbStatic = DataSource.getConnection("UserName", "Password");
} catch (SQLException e) {
e.printStackTrace();
}
}

...以及断开连接的以下内容:

...
dbStatic.close();
...

我正在使用在 Windows 7-32 位机器上运行的 Firebird 2.1,Java 版本 1.7,Jaybird 版本 2.2.8,Tomcat 版本 7.xx 在 Win7-32​​ 位机器上运行,浏览器是 Chrome 版本或其他(新)运行 Win XP SP3。

我使用名为 IBExpert 的第三方工具来查看连接数和/或运行此语句:

select * from mon$attachments;

当我查看 .close() 语句运行后与数据库的连接数时,该数字并没有减少。这是为什么?如果我等待的时间足够长,或者如果 Tomcat 服务器重新启动,连接数确实会减少。关闭浏览器不会影响连接。

最佳答案

正如安德烈亚斯在评论中指出的那样,FBWrappingDataSource是一个连接池。这意味着池保持物理连接打开,并分发由连接池中的物理连接支持的逻辑连接。一旦您调用 close()在该逻辑连接上,物理连接返回到池中以供重用。物理连接保持打开状态。

如果要关闭所有连接,需要调用 FBWrappingDataSource.shutdown() .这将关闭所有当前未使用的物理连接(!),并将数据源标记为关闭。

但是,包中的所有内容 org.firebirdsql.pool应被视为弃用;它将在 Jaybird 3 中删除。参见 Important changes to Datasources

如果您只需要一个数据源,请使用 org.firebirdsql.pool.FBSimpleDataSource (对于 Jaybird 3,您需要使用 org.firebirdsql.ds.FBSimpleDataSource 代替)。

如果您需要连接池,请使用第三方连接池库,如 HikariCP、DBCP 或 c3p0。

也就是说,我想指出您应该考虑的几件事:

  • Jaybird 2.2.8 不是最新版本,考虑升级到 2.2.12,当前 latest release of Jaybird .
  • 为连接使用静态字段通常不是一个好主意(尤其是对于 Web 应用程序),如果这确实是您的需要,请考虑您的设计。您最好将数据源设为静态字段,并获取(并关闭!)一个工作单元的连接(即:一个请求)。这也可能表明您只使用 DriverManager 会更简单。创建连接。
  • 命名规则:你的变量DataSource应该叫dataSource如果您遵循常见的 Java 约定
  • setLoginTimeout(Integer.parseInt(10))应该会导致编译错误,因为没有方法 Integer.parseInt这需要 int , 并且方法本身已经接受 int .

关于java - 为什么我的 Java JDBC 到 Firebird 数据库的连接不会断开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254022/

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