Обработка исключений позволяет нам обрабатывать ошибки, которые могут возникнуть при работе программы и контролировать поведение программы при их появлении (в некоторых случаях).
Когда происходит ошибка, программа “бросает” исключение. Это означает, что выполнение программы прекращается и контроль передаётся ближайшему обработчику. Если обработчик не прописан, то выполнение программы прекращается полностью.
Механизм обработки исключений в JDBC крайне похож на механизм обработки исключений в самом языке Java. Чаще всего мы имеем дело с исключением java.sql.SQLException.
Рассмотрим методы классы SQLException:
- getMessage()
Принимает сообщение ошибки JDBC драйвера, которая обрабатывается драйвером, либо получает номер ошибки и сообщение для ошибки базы данных (далее – БД). - getSQLState()
Принимает строку SQLState. Для ошибки JDBC драйвера. Этот метод не возвращает полезной информации. - getErrorCode()
Возвращает код ошибки, который связан с исключением. - getNextException()
Получает следующий экземпляр исключения в цепочке исключений. - printStackTrace()
Отображает текущее исключение и обратный порядок в стандартный поток ошибок. - printStackTrace(PrintStream s)
Печатает исключение и его обратный порядок в указанный поток. - printStackTrace(PrintWriter w)
Печатает исключение и его обратный порядок в указанный writer.
Благодаря информации, которая предоставляется экземпляром исключения мы можем обработать данное исключение корректным образом и продолжить выполнение программы.
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
Пример:
import java.sql.*;
public class JdbcExceptionDemo {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/PROSELYTE_TUTORIALS";
static final String USER = "ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ";
static final String PASSWORD = "ВАШ_ПАРОЛЬ";
public static void main(String[] args) {
Connection connection = null;
try {
Class.forName(JDBC_DRIVER);
System.out.println("Connecting to database...");
connection = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD);
System.out.println("Creating statement...");
Statement statement = connection.createStatement();
String SQL = "SELECT * FROM developers";
ResultSet resultSet = statement.executeQuery(SQL);
System.out.println("Displaying retrieved records...");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String specialty = resultSet.getString("specialty");
int salary = resultSet.getInt("salary");
System.out.println("\n==============");
System.out.println("id: " + id);
System.out.println("Name: " + name);
System.out.println("Specialty: " + specialty);
System.out.println("Salary: " + salary);
System.out.println("==============\n");
}
System.out.println("Releasing resources...");
resultSet.close();
statement.close();
connection.close();
System.out.println("Thank You.");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
В результате работы программы, мы получим, примерно, следующий результат:
/*Some System Messages*/
Connecting to database...
Creating statement...
Displaying retrieved records...
==============
id: 1
Name: Proselyte
Specialty: Java
Salary: 3000
==============
==============
id: 2
Name: Peter
Specialty: C++
Salary: 4000
==============
==============
id: 3
Name: AsyaSmile
Specialty: UI/UX
Salary: 3000
==============
==============
id: 4
Name: Eugene
Specialty: Java
Salary: 4000
==============
==============
id: 5
Name: Mike
Specialty: PHP
Salary: 2500
==============
Releasing resources...
Thank You.
В этом уроке мы изучили основы исключений при работе с JDBC и способ их обработки. Мы, также, рассмотрели пример простого приложения с его применением.
В следующем уроке мы изучим обработку пакетов в JDBC.