我不能在构造函数之外使用数据库连接,为什么?

时间:2012-12-11 16:44:45

标签: java mysql netbeans

为什么我不能在构造函数外执行查询?我不能使用我在构造函数中声明的变量。为什么不?我是否必须将数据库连接放在带参数的方法中?

public class main extends javax.swing.JFrame
{
    DefaultListModel model = new DefaultListModel();

    public main()
    {
        initComponents();
        try
        {
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost/project", "root", "password");
            Statement stat = con.createStatement();
            ResultSet resultaat = stat.executeQuery(query);

            while (resultaat.next())
            {
                model.addElement(resultaat.getString(2));
            }
        }
        catch (Exception ex)
        {
            System.out.println(ex);
        }
    }
}

4 个答案:

答案 0 :(得分:2)

  

我无法使用构造函数中声明的变量。为什么不呢?

因为它们在构造函数中声明,所以仅限于该范围。你不能在构造函数之外访问它们。如果您想在构造函数之外使用它们,请将它们设置为实例变量,这应该是您应该首先进行的。

你的班级应该喜欢这样的东西:

public class DBConnection {
  Connection con=null;
  public DBConnection() {
    initComponents();
    try {
      conn = DriverManager.getConnection("jdbc:mysql://localhost/project","root","password");
    }
    catch(SQLException ex) {
    }
  }

  public void doDBOps() {
    String yourQuey="whatever";
    PreparedStatement stmnt = this.conn.preparedStatement(yourQuery);
    ResultSet rs = stmnt.executeQuery();
    //rest of your code 
  }
}

答案 1 :(得分:2)

con正在构建您的构造函数范围。使用

Connection con;

作为类变量和构造函数

con = DriverManager.getConnection("jdbc:mysql://localhost/project","root","password");

仅使用此功能。对所需变量执行相同操作。你需要在课堂上使用它。

答案 2 :(得分:0)

方法或构造函数中定义的变量仅限于该范围。如果您希望初始化变量并在整个类中使用它,您必须将其转换为类字段(因此,将其范围扩展到类本身),并按照惯例定义get和/或set方法。

答案 3 :(得分:0)

您看起来整体上看起来是数据库的Singleton类。您可以在其他类中使用此类来访问现有连接,而不是每次都使用DriverManager工厂来获取新的连接对象。

下面的示例是从here

无耻地被盗的
public class DBConnectionSingleton
{
  private static DBConnectionSingleton instance = null;
  private static Connection conn;
  private DBConnectionSingleton()
  {
    String dbDriver = ..
    String url = ..
    String username= ..
    String password = ..
    try
    {
      Class.forName(dbDriver);
      conn = DriverManager.getConnection(url, username, password);
    }
    catch (ClassNotFoundException cnfErr)
    {
      cnfErr.printStackTrace();
    }
    catch (SQLException err)
    {
      err.printStackTrace();
    }
  }

  public static DBConnectionSingleton getInstance()
  {
    if (instance == null)
      return new DBConnectionSingleton();
    else
      return instance;
  }
  public static Connection getConnection()
  {
    return conn;
  }
}