Java 在整个运行时保持JDBCMySQL连接并仅在执行结束时关闭它是否有意义?

Java 在整个运行时保持JDBCMySQL连接并仅在执行结束时关闭它是否有意义?,java,performance,jdbc,connection,runtime,Java,Performance,Jdbc,Connection,Runtime,我正在编写一个Java服务器应用程序,它必须经常与MySQL数据库通信。我正在使用JDBC连接到数据库 现在我应该创建一个连接并在整个运行时使用它吗 或者我应该在需要与数据库通信时始终创建一个新的连接 哪个解决方案更好?您可能需要使用jdbc连接池。让连接打开的时间过长可能会导致奇怪的超时错误等。您可能需要使用jdbc连接池。让连接打开的时间过长可能会导致奇怪的超时错误等等。让我们看看,假设你有一个应用程序,并且你打开了一个连接,你在应用程序中的整个时间都在打开(直到你关闭它),这将占用你大量的

我正在编写一个Java服务器应用程序,它必须经常与MySQL数据库通信。我正在使用JDBC连接到数据库

现在我应该创建一个
连接
并在整个运行时使用它吗

或者我应该在需要与数据库通信时始终创建一个新的
连接


哪个解决方案更好?

您可能需要使用jdbc连接池。让连接打开的时间过长可能会导致奇怪的超时错误等。

您可能需要使用jdbc连接池。让连接打开的时间过长可能会导致奇怪的超时错误等等。

让我们看看,假设你有一个应用程序,并且你打开了一个连接,你在应用程序中的整个时间都在打开(直到你关闭它),这将占用你大量的资源,所以你决定在方法中使用它,就像这样

   public static void(){
       //open connection
      //doing stuff
       connection.Close();
}
因此,每次使用该方法时,您都会打开然后关闭连接,这意味着您避免了第一个问题。但是,打开和关闭连接可能会导致更多的资源使用


因此,解决方案使用它将允许您创建一个连接对象池,每次您不需要它时,您都会将该连接返回到池中,等待您重新使用它。

让我们看看,假设您有一个应用程序,当你打开应用程序时,你会一直打开一个连接(直到你关闭它),这会占用你大量的资源,所以你决定在方法内部使用它,就像这样

   public static void(){
       //open connection
      //doing stuff
       connection.Close();
}
因此,每次使用该方法时,您都会打开然后关闭连接,这意味着您避免了第一个问题。但是,打开和关闭连接可能会导致更多的资源使用

因此,解决方案使用它将允许您创建一个连接对象池,每次您不需要它时,您都会将该连接返回到池中,等待您重新使用它。

解决方案是
使用jdbc连接池
使用JDBC类型3驱动程序。

解决方案是
使用jdbc连接池


使用JDBC类型3驱动程序。

@MinecraftShamrock:在提问之前您是否研究过“JDBC连接池”?@MinecraftShamrock一个好的观点是,您可以将鼠标悬停在问题中的标记上,然后会出现一个带有链接的弹出窗口,该窗口将导航到wiki。至少Java和相关技术有一个不错的wiki来学习基础知识和/或指向好的学习资源的链接。例如,将一个连接保持大约20秒,然后创建一个新的连接并保持20秒,这是一个很好的可能性吗?@MinecraftShamrock-不。你所做的一切都是创造不必要的复杂性。使用JDBC连接池。它们有很多,您甚至不需要实现一个。然后,使用连接池,打开连接,完成工作,然后“关闭”连接。@MinecraftShamrock:在询问之前您是否研究过“jdbc连接池”?@MinecraftShamrock一个好的地方是,您可以将鼠标悬停在问题中的标记上,然后会出现一个带有链接的弹出窗口,可以导航到wiki。至少Java和相关技术有一个不错的wiki来学习基础知识和/或指向好的学习资源的链接。例如,将一个连接保持大约20秒,然后创建一个新的连接并保持20秒,这是一个很好的可能性吗?@MinecraftShamrock-不。你所做的一切都是创造不必要的复杂性。使用JDBC连接池。它们有很多,您甚至不需要实现一个。然后,使用池,打开你的连接,完成你的工作,然后“关闭”连接。池与连接有什么关系,这样就不会浪费资源?它允许你打开多个连接,因此当线程需要连接时,它可以“保留”连接以供使用,当该线程完成时,他返回连接,以便它可以在其他线程中使用(无需每次打开和关闭连接)。这样,如果有可用的连接,线程就不必等到另一个完成。正如您所看到的,这取决于您的应用程序需要,我建议您首先分析您需要什么,然后您可以选择是否使用连接池。此外,这取决于您是否要同时对数据库执行两个或更多查询,在这种情况下,您应该使用连接池。虽然应用程序在同一时间只进行一次查询,并且不需要长时间使用,但您不必担心,在关闭应用程序之前,请保持连接处于打开状态。因此,它只保留一个连接,该连接被提供给多个线程?使用池连接,您将拥有多个连接,可以分配给一个线程,如果一个线程正在使用其中一个连接,则此连接不能在另一个线程中使用,但是,由于您有多个连接,因此可以将另一个连接分配给该线程,每当完成连接时,您只需“关闭它”(它并没有真正关闭它,连接只是返回到池中,因此您可以将其分配给另一个线程)。池与连接之间有什么关系?这样就不会浪费资源?它允许打开多个连接,因此当线程需要连接时,它可以“保留”该连接以供使用,当该线程完成时,他返回该连接,以便在其他线程中使用(无需每次打开和关闭连接)。这样,如果有可用的连接,线程就不必等到另一个完成。正如您所看到的,这取决于您的应用程序需要,我建议您首先分析您需要什么,然后您可以选择是否使用连接池。而且