1

コンストラクターの外部でクエリを実行できないのはなぜですか?コンストラクターで宣言した変数を使用できません。なぜだめですか?データベース接続をパラメーター付きのメソッドに入れる必要がありますか?

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

4 に答える 4

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 
  }
}
于 2012-12-11T16:46:31.360 に答える
2

conはコンストラクタスコープを使用しています。使用する

Connection con;

クラス変数として、コンストラクター内

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

これのみを使用してください。必要な変数についても同じようにします。クラス全体で使用する必要があるもの。

于 2012-12-11T16:47:36.017 に答える
0

メソッドまたはコンストラクター内で定義された変数は、そのスコープに制限されます。変数を初期化してクラス全体で使用する場合は、変数をクラスフィールドに変換し(したがって、そのスコープをクラス自体に拡大する)、慣例により、getおよび/またはsetメソッドを定義する必要があります。

于 2012-12-11T16:48:37.413 に答える
0

全体的に見ているのは、データベースのシングルトンクラスのようです。ファクトリを使用してDriverManager毎回新しい接続オブジェクトを取得する代わりに、このクラスを他のクラスで使用して既存の接続にアクセスできます。

以下のサンプルはここから恥知らずに盗まれています

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;
  }
}
于 2012-12-11T16:53:36.900 に答える