如果我将JDBC Connection对象的值传递给另一个Connection对象,那么只打开一个连接吗? (MySQL DB使用)

时间:2016-11-05 00:40:31

标签: java mysql jdbc

我的方法返回Connection对象的值。

Public class DatabaseConnection
{
    public Connection establishConnection(C)  
    {
        try 
        {
            this.readLogin();  // prompt user to enter String values for user, pass, host
            this.createDatabaseIfNeeded();  // make chessleaguedb if not found        
            conn = DriverManager.getConnection
                        ("jdbc:mysql://"+host+":3306/chessleaguedb", user, pass);
            System.out.println("Successfully connected to chessleaguedb");

        } 
        catch (Exception e) 
        {
            // logic
        }   
        return conn;  // want the logic to handle opening a connection in this class and method, then pass it to a Connection object in my 'menu' class
    } 
}

此方法在另一个类中调用,并将返回值传递给从现在开始使用的新Connection对象。

public class DBAMenu
{
     DatabaseConnection startConnection = new DatabaseConnection; // new instance of class that contains the aforementioned method establishConnection()

     Connection conn = null;  

     conn = startConnection.establishConnection();
}

这里只打开一个数据库连接,还是两个,因为我正在返回值并将其传递给新的Connection对象?

我尝试过使用NetBeans调试器,并且在此过程之后Connection值保持不变,但不可否认,我对Netbeans调试器中值列的含义并不是100%。

(不使用Java EE,因此不能使用池,并且不能使用开源软件来处理池,因为工作必须是我自己的第2年本科项目)

2 个答案:

答案 0 :(得分:1)

您只使用了一个连接,因为您只调用了一次conn = startConnection.establishConnection();

您需要实现关闭连接,否则会造成连接泄漏。

您可以使用以下内容:

try(Connection conn =startConnection.establishConnection()) {
 //actual logic to perform db operations
} catch(SQLException sqlexe) {
  //log exceptions
}

P.S。:像这样明确/手动处理连接不是最佳做法,而是尝试实现连接池。

答案 1 :(得分:1)

  

如果我将JDBC Connection对象的值传递给另一个Connection对象,那么只打开一个连接吗?

你没有拥有'另一个Connection对象'。您有另一个类型为Connection引用。两个引用都引用相同的对象。