1

注意:不是 java EE 问题

在 java 中,我需要将 SQL 连接从一个类传递到另一个类作为参数。但似乎接收类获取了 Connection 对象,但它为空且未连接。

我读过 java EE 使用了一个池。但是我的项目很小,使用 JDBC 的驱动程序管理器进行 localhost 连接。我也读过java并没有通过引用传递。

有什么办法可以将实时连接从一个班级传递到另一个班级?

编辑:课堂连接

try
  {
      Class.forName("com.mysql.jdbc.Driver");
      connect = DriverManager.getConnection(
                "jdbc:mysql://localhost/MYDATABASE?user="+username+"&password="+password);
return connect;
  }catch(Exception e){
      return null;

在我的主要课程中

connect c = new connect(user,pass);
4

3 回答 3

1

我猜你已经正确地做到了,但这只是使用方法的一个案例,没有任何技巧

class A
{
    Connection connection;

    public void setConnection( Connection connection )
    {
        if ( connection == null ) System.out.println("null passed!");
        this.connection = connection;
    }
}

现在您只需调用该方法,就是这样:

Connection c = null;
// TODO: added code here to establish the connection.
A a = new A();
if ( c == null ) System.out.println("c is null before passing it on!");
a.setConnection(c);

如果传递的值是null(未连接的),那么您需要查看创建连接的代码,以确保您传递的是有效的(连接的)对象。

编辑
我刚刚看到您添加的代码片段。如果那try {...} catch 在您的构造函数中,那么它将不起作用......甚至不应该编译!构造函数不能用于返回值,只有方法可以。

于 2013-07-29T12:11:02.337 回答
1
  • 我可以告诉您,由于 return 语句,您没有在 Constructor 中创建连接。

请看下面:

class Connect
{
public Connection createConnection(){ 
try
  {
      Class.forName("com.mysql.jdbc.Driver");
      connect = DriverManager.getConnection(
                "jdbc:mysql://localhost/MYDATABASE?user="+username+"&password="+password);
return connect;
  }catch(Exception e){
      return null;
}
}



class Main
   {
   public void connectionNeededHere()
   {
       //Some code here.
       ...
       //This is what your are calling. 
       Connect c = new connect(user,pass);
       //This is what you need to add.
       Connection con = c.createConnection();
       Sysout(con);
   }

   }
于 2013-07-29T12:25:45.913 回答
1
public class Connect
{
private static Connection sharedConnection;
public static Connection createOrAccessConnection(String user,String pass, boolean forceNew){ 
Connection connect = sharedConnection;
try
  {

      Class.forName("com.mysql.jdbc.Driver");
      if(forceNew || connect == null)
         { 
              connect = DriverManager.getConnection(
                "jdbc:mysql://localhost/MYDATABASE?user="+username+"&password="+password);
              if(sharedConnection == null ) 
                { 
                sharedConnection = connect; 
                }  
         }
return connect;
  }catch(Exception e){
      return null;
}
}



class Main
   {
   public void transactionMethod()
   {
       //Some code here.
       //This is what you need to add.
       Connection con = Connect.createConnection(user,pass,false);
       Sysout(con);
       AnotherClass ac = new AnotherClass();
       ac.operation1(con, false);
       ac.operation1(null,true);  
   }



class AnotherClass
       {
       public void operation1(Connection con, boolean createNew) 
            {
            if(createNew || con==null)
               {
               con = Connect.createConnection(user,pass,false);
               }
            //Some code here
            if(createNew)
               {
               //Close connection here. 
               }      
            }
       } 

       }
于 2013-07-29T13:14:08.367 回答