私は、クラスといくつかのサブクラスを使用するプロジェクトに取り組んでいます。私は私の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();
//...
}
そしてDatabaseConnectionHandler
がDatabase
です:あなたはDatabase
を作成するとき
ことがすべてのデータベースにはDatabaseConnectionHandlerを作成する必要はありませんが、これはこれもデータベースであるため、DatabaseConnectionHandlerも作成されます。これはDatabaseでもあり、DatabaseConnectionHandlerも作成されるため、DatabaseConnectionHandlerも作成されるため、DatabaseConnectionHandlerも作成されます。これもDabaseであるため、DabaseであるDatabaseConnectionHandlerも作成されるため、DabaseであるDatabaseConnectionHandlerも作成されるため、DabaseであるDatabaseConnectionHandlerも作成されます。行っている? – azurefrog
私もそう思っていましたが、DatabaseConnectionHandlerのコードが表示されません。 –
@JvanAmerongenデータベースを作成していない場合、 'DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler();'は何をしていますか? – azurefrog