Java JDBC类型的连接

Java JDBC类型的连接,java,mysql,database,jdbc,Java,Mysql,Database,Jdbc,我正在用Java和MySQL(JDBC连接数据库)创建图书馆管理应用程序,我遇到了一个问题,我查阅了很多主题、书籍和网站,但没有找到合适的答案。这是处理人际关系的好方法吗?我认为在这种情况下,整个应用程序的一个连接是一个不错的选择。我的想法是,在每个类中的每个函数中,当我需要使用连接对象时,这些函数将需要一个连接参数。例如,在main类中,我将调用manager对象“Man”,并将Man.getMyConn()作为此参数传递给每个构造函数,并在主框架关闭时调用Man.close()。这是个坏主意

我正在用Java和MySQL(JDBC连接数据库)创建图书馆管理应用程序,我遇到了一个问题,我查阅了很多主题、书籍和网站,但没有找到合适的答案。这是处理人际关系的好方法吗?我认为在这种情况下,整个应用程序的一个连接是一个不错的选择。我的想法是,在每个类中的每个函数中,当我需要使用连接对象时,这些函数将需要一个连接参数。例如,在main类中,我将调用manager对象“Man”,并将
Man.getMyConn()
作为此参数传递给每个构造函数,并在主框架关闭时调用
Man.close()
。这是个坏主意吗?也许我应该使用单例模式或连接池? 对不起我的英语,我还在学习

public class manager {
private Connection myConn;

public manager() throws Exception {


    Properties props = new Properties();
    props.load(new FileInputStream("app.properties"));

    String user = props.getProperty("user");
    String password = props.getProperty("password");
    String dburl = props.getProperty("dburl");


    myConn = DriverManager.getConnection(dburl, user, password);
    System.out.println("DB connection successful to: " + dburl);
}

public Connection getMyConn() {
    return myConn;
}
  //close class etc.
}

通常不会。进一步的答案取决于应用程序的类型。如果您正在制作web应用程序,那么您肯定应该使用连接池。如果您正在制作例如桌面应用程序(此时只有一个用户可以访问它),那么您可以根据每个请求打开和关闭连接。

我有可以按您的方式运行的应用程序。正如@Branislav所说,如果您想要执行多个并发查询,那么这是不够的。还有一个危险是与数据库的连接可能会丢失,您需要重新启动应用程序以获得新的连接,除非您编写代码来捕获该连接并重新创建连接


使用单例将过于复杂。拥有一个
getConnection()
方法(正如您所做的那样)非常重要,因为这意味着您可以轻松地更改代码,以便在以后需要时使用池。

这将是一个桌面应用程序。所以我应该创建一个类getConnection,它返回新的连接对象,每次我需要执行查询时,我应该使用它吗?例如,在带有参考资料的try子句中,因为我不需要担心关闭连接、语句等。我说得对吗?return应该是这样的:“returndrivermanager.getConnection(dburl,user,password);”?感谢您的帮助在
最后关闭它们(非常重要!)块。连接、语句、结果集实例。。。正如我在每次数据库请求时所说的,您将打开一个新连接(并在执行查询或语句后将其关闭)。因为它是一个桌面应用程序,所以您将分发数据库URL、用户ID和密码。你相信所有用户的行为吗?@AndrewS这是不可避免的。你只需要相信他们。做一些古怪的事情,比如编码DB参数,是不会有任何结果的:)好吧,要么你信任它们,要么你不直接访问数据库。通过公共互联网访问数据库是一个非常糟糕的想法。最好使用其他方式进行通信,让服务器执行实际的数据库操作。如果您是数据库的唯一用户(并且您没有合适的服务器-客户机体系结构),那么也不需要在每次操作后关闭连接。但是在这种情况下,getConnection()应该在每次调用此函数时返回一个新连接是吗?或者像在我的应用程序中一样,getConnection()应该返回现有的连接,当我想要有更多的连接时,我可以创建更多的管理器对象,每个管理器对象都有自己的连接,对吗?我可以通过obj1.grtmyconn()、obj2.grtmyconn等访问它。是吗?