Как мне избежать этого исключения SQL? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть класс DBconnector, который я написал. Вот его пример с использованием метода запроса вставки. Игнорировать запрос сейчас:

ResultSet NewCustomer = db.executeInsert("SELECT s Bookings VALUES (surnameOut,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')");

В данный момент в строке выше появляется ошибка «Необработанное исключение типа SQLException». Он предлагает окружить приведенное выше оператором try / catch или дать методу, содержащему код, исключение типа throws. Я надеялся, что есть какой-то способ разобраться с этим внутри класса DBconnector, чтобы я мог поддерживать крошечные, одиночные строки для выполнения SQL-запросов. Возможно ли это?

Вот код из метода executeInsert:

public ResultSet executeInsert(String query)throws SQLException {
        Statement s = null;
        ResultSet rs = null;
        try{
            s = con.createStatement();
            s.executeQuery(query);
            rs = s.getResultSet();
        }
        catch(SQLException e){}
        return rs;
    }

Ответы [ 3 ]

5 голосов
/ 15 марта 2012

Я надеялся, что есть какой-то способ разобраться с этим внутри класса DBconnector, чтобы я мог поддерживать крошечные одиночные строки для выполнения SQL-запросов.

Итак, что вы хотите, чтобы происходило, когда вы получили неработающий запрос (например, потому что вы пытаетесь выполнить вставку, которая фактически выбирает).Вы действительно хотите просто полностью игнорировать сбой, даже не регистрируя его, как ваш текущий метод?Это почти никогда правильный подход.Во многих случаях, если запрос к базе данных завершается неудачно, вы должны прервать все, что вы делаете - исключение должно поднять стек до какой-то высокоуровневой «единицы работы», будь то запрос, действие пользователя или что-то в этом роде.1012 * Причина проверенных исключений Java именно в том, чтобы заставил задуматься о том, как вы хотите обрабатывать ошибки - так что не игнорируйте это, на самом деле думайте , что вы хотели быслучается ... и если у этого метода недостаточно контекста, чтобы сказать (чего, вероятно, нет), вы должны позволить исключению всплыть и заставить вызывающих абонентов думать.

2 голосов
/ 15 марта 2012

Это (по существу) старый аргумент проверенных исключений - некоторые люди любят их, некоторые ненавидят их (см. здесь ).

Мне, например, не нравится проверенныйисключения (опасно ли не соглашаться с репутацией Mr. Skeet @ 415k ??!), поэтому, когда я вынужден иметь дело с одним, я обычно использую try / catch и повторно генерирую ошибку как пользовательский подкласс RuntimeException.RuntimeExceptions не нужно обрабатывать явным образом.

Spring, который является одной из наиболее часто используемых сред, использует этот подход.

Однако, когда вы используете RuntimeExceptions, убедитесь, что вв какой-то момент вы знаете, где будет обрабатываться это исключение.Вы никогда не хотите, чтобы он прошел весь путь до вашего конечного пользователя и позволил им увидеть неприятный след стека.

0 голосов
/ 15 марта 2012

Чтобы ответить на ваш вопрос, ваш метод в DBConnector явно говорит, что выдает исключение SQLException (даже если это не так). Поскольку SQLException является проверенным исключением, вам необходимо иметь дело с любым кодом, который его вызывает.

Похоже, это не тот случай, который вы хотите. Если вы удалите throws SQLException , вы можете написать свой крошечный код SQL. Обязательно прислушайтесь к советам других ответов, потому что вы эффективно игнорируете проблемы, которые могут быть не очень хорошими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...