Java 在JDBC中轮询数据库时重用连接?

Java 在JDBC中轮询数据库时重用连接?,java,Java,有一个用例,其中需要保持与数据库的连接打开,以便定期执行查询 建议在执行查询后关闭连接,然后在时间间隔(10分钟)后重新打开。我想不会,因为打开到数据库的连接很昂贵 连接池是备选方案并继续使用连接吗?是的,连接池是备选方案。每次打开连接(就代码而言)并尽快关闭。连接池将以适当有效的方式处理物理连接(包括任何需要的keepalives、偶尔的“活动性”测试等) 我不知道目前的技术水平是什么,但我在上一个涉及JDBC的Java项目中(很久以前)非常成功地使用了连接池。每次打开连接(就代码而言)并尽快

有一个用例,其中需要保持与数据库的连接打开,以便定期执行查询

建议在执行查询后关闭连接,然后在时间间隔(10分钟)后重新打开。我想不会,因为打开到数据库的连接很昂贵


连接池是备选方案并继续使用连接吗?

是的,连接池是备选方案。每次打开连接(就代码而言)并尽快关闭。连接池将以适当有效的方式处理物理连接(包括任何需要的keepalives、偶尔的“活动性”测试等)


我不知道目前的技术水平是什么,但我在上一个涉及JDBC的Java项目中(很久以前)非常成功地使用了连接池。每次打开连接(就代码而言)并尽快关闭。连接池将以适当有效的方式处理物理连接(包括任何需要的keepalives、偶尔的“活动性”测试等)


我不知道目前的技术水平是什么,但我在上一个涉及JDBC的Java项目中非常成功地使用了连接池(很久以前)。

您应该使用连接池。编写应用程序代码以请求池中的连接,使用连接,然后将连接返回到池中。这可以保持代码的整洁。然后依靠池实现来确定管理连接的最有效方式(例如,保持连接打开还是关闭连接)

通常情况下,打开一个连接是“昂贵的”,这通常是由于设置TCP/IP连接、身份验证等的开销。但是,保持一个连接打开“太长”也可能是昂贵的,因为数据库(可能)保留了供连接使用的资源(如内存)。因此,保持连接打开可能会占用这些资源


您不想在管理这些类型的效率权衡时污染应用程序代码,所以请使用连接池。

您应该使用连接池。编写应用程序代码以请求池中的连接,使用连接,然后将连接返回到池中。这可以保持代码的整洁。然后依靠池实现来确定管理连接的最有效方式(例如,保持连接打开还是关闭连接)

通常情况下,打开一个连接是“昂贵的”,这通常是由于设置TCP/IP连接、身份验证等的开销。但是,保持一个连接打开“太长”也可能是昂贵的,因为数据库(可能)保留了供连接使用的资源(如内存)。因此,保持连接打开可能会占用这些资源


您不想在管理这些类型的效率权衡时污染应用程序代码,所以请使用连接池。

连接池将是您的一种选择。然后,您可以保留代码,因为它包括打开和关闭连接。连接池将关心连接。如果关闭池的连接,它将不会被关闭,而只是再次在池中可用。如果在关闭连接后打开连接,如果池中存在打开的连接,则池将返回该连接。因此,在应用服务器中,您可以使用内置连接池。对于简单的java应用程序,大多数JDBC驱动程序还包括池驱动程序

连接池将是您的一种选择。然后,您可以保留代码,因为它包括打开和关闭连接。连接池将关心连接。如果关闭池的连接,它将不会被关闭,而只是再次在池中可用。如果在关闭连接后打开连接,如果池中存在打开的连接,则池将返回该连接。因此,在应用服务器中,您可以使用内置连接池。对于简单的java应用程序,大多数JDBC驱动程序还包括池驱动程序

这里的答案实际上取决于应用程序。如果同一应用程序中的同一数据库同时使用其他连接,那么池肯定是您的答案

如果应用程序所做的只是查询数据库,请等待10分钟,然后再次查询,然后简单地连接并重新连接。连接被认为是一项昂贵的操作,但所有事情都是相对的。如果你每10分钟只做一次就不贵了。如果应用程序如此简单,不要引入不必要的复杂性

注:
好的,复杂性也是相对的,所以如果您已经在使用Spring之类的东西,并且已经知道如何使用它的池机制,那么就将其应用于这种情况。如果不是这样,请保持简单。

这里的答案实际上取决于应用程序。如果同一应用程序中的同一数据库同时使用其他连接,那么池肯定是您的答案

如果应用程序所做的只是查询数据库,请等待10分钟,然后再次查询,然后简单地连接并重新连接。连接被认为是一项昂贵的操作,但所有事情都是相对的。如果你每10分钟只做一次就不贵了。如果应用程序如此简单,不要引入不必要的复杂性

注:
好的,复杂性也是相对的,所以如果您已经在使用Spring之类的东西,并且已经知道如何使用它的池机制,那么就将其应用于这种情况。如果这不是真的,请保持简单。

在打开和关闭连接、保持连接打开、确保已“保持活动”的连接在重新开始使用时仍然“有效”、使损坏的连接无效等方面有很多很多折衷办法