声明连接变量

Ama*_*war 5 php c# c++ java

我想知道哪种是使用以下连接变量的安全和更好的方法.

第一:连接作为类的类成员变量

class MyClass
{
    Connection conn;

    public MyClass(Connection conn) {
        this.conn = conn;
    }

    public void myMethod(){
        //Do some DB operations using conn
    }
}
Run Code Online (Sandbox Code Playgroud)

第二:在方法中初始化连接

class MyClass
{       
    public MyClass() {      
    }

    public void myMethod(){
        Connection conn= initializeFunction(); //Initialize Connection
        //Do some DB operations using conn
    }
}
Run Code Online (Sandbox Code Playgroud)

第三:将连接作为参数发送到函数

class MyClass
{       
    public MyClass() {      
    }

    public void myMethod(Connection conn){
        //Do some DB operations using conn
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:问题不是特定于编程语言的,因此我也添加了除Java以外的标签.

Hab*_*bib 6

说到数据库连接对象,最好的是:尽可能早地打开并尽快关闭.

在C#中有一个using语句,它与实现IDisposable接口的对象一起工作.using语句的作用类似于try/finally代码块.IMO处理连接的一般做法应该是这样的:

try
{
connection = new Connection();
connection.Open(); // open the connection
//work with the connection, DB CRUD operations
}
finally
{
if(connection != null)
     connection.Close(); // close the connection in finally block
                         // so that even if the exception occurs, connection gets closed. 
}
Run Code Online (Sandbox Code Playgroud)

对于你的选择,我相信第一个是最差的,它将连接对象与类的对象一起保存.

我认为你应该更关心打开/关闭连接而不是在多个地方保持连接的对象.


Alo*_*ave 6

这三种方法都提供不同的功能:

  1. 您的类拥有连接对象,只要您的对象保持活动状态,连接对象就会保持活动状态.
  2. 连接对象是方法的本地对象,并在方法返回后到期.
  3. 该方法的调用者拥有连接对象.

选择取决于:

  • 您想如何处理连接对象的所有权&
  • 您需要记住,只要需要而不是所有时间,数据库连接都需要打开,同时,
  • 您希望连接数据库的频率.