Как перехватить исключения метода

103
14 мая 2021, 03:20

Есть метод в коде. Он подключается к базе и заносит туда значения.

public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException{
    List<Long> lst = new ArrayList<Long>();
    while(true){
        long timestamp = System.currentTimeMillis() / 1000L;
            Connection connection = null;
            Statement statement = null;
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD);
            connection.setAutoCommit(false);
            statement = connection.createStatement();
            String SQL;
            Savepoint savepointOne = connection.setSavepoint("SavepointOne");
            try { 
            for (int i = lst.size() - 1; i >= 0; i--) {
                SQL = "INSERT INTO logg VALUES (default, '"+lst.get(i)+"')";
                statement.executeUpdate(SQL);
                connection.commit();
                lst.remove(new Integer(i));
            }
            SQL = "INSERT INTO logg VALUES (default, '"+timestamp+"')";
            statement.executeUpdate(SQL);
            connection.commit();
        } catch (SQLException e) {
            // Проблема с соединением
            lst.add(timestamp);
            System.out.println("troubles with connection");
            connection.rollback(savepointOne);
        }
        statement.close();
        connection.close();       
        System.out.println("Sleep 2 sec...");
        Thread.sleep(2000);
    }

Как перехватить эти события непосредственно в методе? Когда пропадает соединение к БД у меня система падает, и я не знаю почему она падает. Точнее не знаю на каком событии

Answer 1

У вас все исключения пробрасываются вверх по стеку к main, поэтому программа завершает своё действие с ошибкой.

throws ClassNotFoundException, SQLException, InterruptedException

Вам нужно удалить эту строчку, и выразить блоки try catch там, где потребует IDE.

Так же, дополнительно, в потенциально опасных местах вы можете выразить свои блоки.try{Ваш код} catch(Exception e){Ваше действие}

По вашему коду

Connection connection = null; Statement statement = null;

Попробуйте вынести эти переменные в поля класса, или объявить их выше цикла.

READ ALSO
this.ИМЯ_ФУНКЦИИ is not a function

this.ИМЯ_ФУНКЦИИ is not a function

Есть класс, в котором есть 3 функцииДве из них должны возвратить значение

300
Анимация спрайтов не один раз

Анимация спрайтов не один раз

Я хотела сделать так, чтобы вся информация о спрайте хранилась в объекте и функцию отрисовки можно было бы использовать много раз не только...

123
Отрисовка картинок в canvas

Отрисовка картинок в canvas

Я хочу сделать,чтобы функцию draw можно было бы применять много раз с разными картинками, но у меня почему-то не выходитМожет это особенности...

100