При создании экземпляра DataService DataService dataservice = new DataService();
метод main () не вызывается, поэтому переменная conn
не инициализируется и остается нулевой. После этого при вызове Statement stmt=con.createStatement();
выдается исключение NullPointerException (NPE). Этот NPE не перехватывается ни в этом блоке перехвата catch (SQLException ex)
, потому что он перехватывает только SQLExceptions, ни в этом catch (Exception e)
, потому что не предусмотрена логика обработки c.
Первый шаг в создании кода - добавление некоторой логики обработки исключений c в метод start () класса MainFrame (никогда не оставляйте пустые блоки catch, это считается антипаттерном).
Затем переместите logi c для инициализации соединения либо в метод getRecords (), сделав его локальной переменной, либо в конструктор DataService, чтобы при обращении к нему была инициализирована переменная conn.
Следующая большая проблема закрывает переменные Connection, Statement и ResultSet после окончания работы с ними. Начиная с java 7, вы можете использовать синтаксис try-with-resources для обработки таких ресурсов.
Также я бы рекомендовал обрабатывать ResultSet внутри метода getRecords (), не раскрывая его вне класса DataService .Этот класс действует как Объект доступа к данным (DAO), и было бы лучше хранить детали реализации внутри. Вместо этого вы можете создать простой класс Employee, экземпляры которого можно инициализировать внутри while(rs.next())
l oop, заполнить значениями из набора результатов и добавить в некоторую коллекцию. Эта коллекция может быть возвращена из метода getRecords ().