Я работаю над проектом, который использует класс и некоторые подклассы. Когда я заявляю о своем Database
класс, я получаю эту ошибку:StackOverflowError, вызванный классом, объявляющим подкласс?
Exception in thread "main" java.lang.StackOverflowError
at data.DatabaseConnectionHandler.<init>(DatabaseConnectionHandler.java:12)
at data.Database.<init>(Database.java:18)
Эти две последние строки повторяются еще примерно 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;
}
}
ли Database()
объявляя DatabaseConnectionHandler()
вызывает эту ошибку? Если да, то как я могу это исправить, а если нет, то почему возникает проблема и как это исправить?
Каждая база данных создает DatabaseConnectionHandler, который также является базой данных, поэтому он также создает DatabaseConnectionHandler, который также является Dabase, поэтому он также создает DatabaseConnectionHandler, который также является Dabase, поэтому он также создает DatabaseConnectionHandler, который также является Dabase, поэтому он также создает DatabaseConnectionHandler, который также является Dabase, поэтому он также создает DatabaseConnectionHandler, который также является Dabase, поэтому он также создает DatabaseConnectionHandler, который также является Dabase ... См., где это идет? – azurefrog
Я тоже так думал, но я не вижу никаких признаков DatabaseConnectionHandler, создающих базу данных в моем коде –
@JvanAmerongen Что вы думаете: «DatabaseConnectionHandler DBCH = new DatabaseConnectionHandler();' делает, если не создает базу данных? – azurefrog