如何通过类共享SQL连接对象?

时间:2018-11-24 18:15:45

标签: java sql javafx singleton

我目前正在使用JavaFX中的SQL构建程序。

我正在主窗口中呼叫DbConnect(),一切正常。 我现在遇到的问题是在其他类(另一个窗口/场景)中获得此数据库连接。现在,我正在所有其他场景中调用数据库连接功能,这将在以后引起问题,因为它总是打开一个新的数据库连接。因此,我的问题是如何在所有类中共享数据库连接。

只希望在主类中将其打开一次,然后将其继承给其他类

这是我的数据库连接功能:

    public Connection DbConnect() {
    try {
        con = DriverManager.getConnection(dbPath, user, pass);
        statm = con.createStatement();
        SetupSystem();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return con;
}

从第一个窗口

//  Initilizing all the database connections
public void DbConnect() {
    con.DbConnect();
    disconnectMenuItem.setVisible(true);
    connectMenuItem.setVisible(false);

}

从第二个窗口(不想在这里打开新连接)要继承第一个窗口的连接

            public void initialize(URL location, ResourceBundle resources) {
        db.DbConnect();
}

预先感谢

1 个答案:

答案 0 :(得分:0)

您可以使用Singleton pattern来通过您的课程共享一个实例:

public final class Singleton {

private static volatile Connection con = null;

private Singleton() {}

public static Singleton getInstance() {
    if (con== null) {
       try {
     con = DriverManager.getConnection(dbPath, user, pass);
     statm = con.createStatement();
    SetupSystem();
     } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
     }
     }

    return con;
 }

}

现在,您可以从像这样的其他类访问数据库连接:

 public class ClassOne {
   Singleton.getInstance();
  }

  public class ClassTwo {

   Singleton.getInstance();
  }