2016-11-11 3 views
0

私は、クラスといくつかのサブクラスを使用するプロジェクトに取り組んでいます。私は私のDatabaseクラスを宣言すると、私はこのエラーを取得する:StackOverflowErrorは、サブクラスを宣言するクラスによって引き起こされますか?

Exception in thread "main" java.lang.StackOverflowError 
    at data.DatabaseConnectionHandler.<init>(DatabaseConnectionHandler.java:12) 
    at data.Database.<init>(Database.java:18) 

これらの最後の2行は、さらに約10000回のために自分を繰り返します。

Databaseは私の親クラスであり、DatabaseConnectionHandlerはサブクラスです。 Databaseクラスでは、DatabaseConnectionHandlerのインスタンスを宣言していますが、これが原因である可能性がありますが、理由はわかりません。

Databaseクラス:

public class Database { 

    protected static Connection connection = null; 
    protected static Statement statement = null; 
    protected static ResultSet resultSet = null; 

    DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler(); //Line 18 
    Registration regis = new Registration(); 

    public Database() throws SQLException { 

     DBCH.openConnection(); 

    } 

そしてDatabaseConnectionHandlerクラス:

public class DatabaseConnectionHandler extends Database { 

    private final String URL = "jdbc:mysql://localhost:3306/foo_bar"; 
    private final String USERNAME = "foo"; 
    private final String PASSWORD = "bar"; 

    public DatabaseConnectionHandler() throws SQLException {} //line 12 

    protected void openConnection() { 

    try { 

     Class.forName("com.mysql.jdbc.Driver"); 
     connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 

     connectionStatus = true; 

    } catch (SQLException | ClassNotFoundException exe) { 

     System.out.println(exe); 

     connectionStatus = false; 

    } 

} 

は、このエラーの原因となっDatabaseConnectionHandler()を宣言Database()ですか?もしそうなら、私はこれをどうやって修正するのですか?もしそうでなければ、問題の原因は何ですか?

public class Database { 

    //... 
    DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler(); 
    //... 

} 

そしてDatabaseConnectionHandlerDatabaseです:あなたはDatabaseを作成するとき

+3

ことがすべてのデータベースにはDatabaseConnectionHandlerを作成する必要はありませんが、これはこれもデータベースであるため、DatabaseConnectionHandlerも作成されます。これはDatabaseでもあり、DatabaseConnectionHandlerも作成されるため、DatabaseConnectionHandlerも作成されるため、DatabaseConnectionHandlerも作成されます。これもDabaseであるため、DabaseであるDatabaseConnectionHandlerも作成されるため、DabaseであるDatabaseConnectionHandlerも作成されるため、DabaseであるDatabaseConnectionHandlerも作成されます。行っている? – azurefrog

+0

私もそう思っていましたが、DatabaseConnectionHandlerのコードが表示されません。 –

+1

@JvanAmerongenデータベースを作成していない場合、 'DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler();'は何をしていますか? – azurefrog

答えて

4

は、あなたもDatabaseConnectionHandler作成

public class DatabaseConnectionHandler extends Database { 

    //... 

} 

だから Database作成 Databaseを作成する必要があります。これは無限回帰です。

次の2つのオプションがあります:Database

  • を作成するときに

    1. DatabaseConnectionHandlerを作成しないでくださいDatabaseConnectionHandler自体がDatabase
  • +0

    したがって、DBCH(略して)が作成されると、_also_別のデータベースが作成されます。新しいデータベースを作成すると、DBCHも作成されますか?そして、DBCHのメソッドを静的にしてDBCHを作成しない方法はありますか? –

    +2

    @ JvanAmerongen: 'DatabaseConnectionHandler'は' Database'を作成しません。*は 'Database'です。 – David

    関連する問題