English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Обработка исключений JDBC (SQLException)

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

При возникновении аномальных ситуаций вызывается исключение. Выражение 'выбрасывать' означает, что текущее выполнение программы останавливается, и управление передается к ближайшему соответствующему блоку catch. Если подходящего блока catch не существует, выполнение программы заканчивается.

Обработка исключений JDBC очень похожа на обработку исключений Java, но для JDBC наиболее часто встречающиеся исключения это java.sql.SQLException.

Методы SQLException

SQLException может возникать как в драйвере, так и в базе данных. При возникновении此类异常,объект типа SQLException передается в блок catch.

Пересылаемый объект SQLException имеет следующие методы, которые можно использовать для получения дополнительной информации о исключении-

МетодОписание
getErrorCode( )

Получает номер ошибки, связанный с исключением.

getMessage( )

Получает сообщение об ошибке JDBC драйвера, которое обрабатывается драйвером, или номер и сообщение об ошибке Oracle базы данных.

getSQLState( )

Получает строку XOPEN SQLstate. Для ошибок драйвера JDBC этот метод не возвращает полезной информации. Для ошибок базы данных этот метод возвращает五位ный код xopensqlstate. Этот метод может возвращать null.

getNextException( )

Получает следующий объект Exception в цепочке исключений.

printStackTrace( )

Печатает текущее исключение или вызываемое исключение и его отладку в стандартный поток ошибок.

printStackTrace(PrintStream s)

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

printStackTrace(PrintWriter w)

печать этого единичного файла и его отладку до указанного принтера.

Используя информацию, предоставленную объектом Exception, вы можете перехватить исключение и продолжить выполнение программы соответствующим образом. Это общая форма блока try-

try {
   // Ваш код исключений между этими фигурными скобками!!!
}
catch(Exception ex) {
   // Ваш код обработки исключений между этими двумя 
   // фигурные скобки, аналогичные подклассу exception 
   // в блоке PL / SQL.
}
finally {
   // Вы должны всегда выполнять код между этими двумя 
   // фигурные скобки. как, например, закрытие подключения к базе данных.
}

онлайн пример

изучите следующий пример код, чтобы понятьtry....catch...finallyиспользование блока.

// шаг 1. импорт необходимых пакетов
import java.sql.*;
public class JDBCExample {
   // JDBC драйвер的名字 и URL базы данных
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   // Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      //Шаг 2: Регистрация JDBC драйвера
      Class.forName("com.mysql.jdbc.Driver");
      //Шаг 3: Установление соединения
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      //Шаг 4: Выполнение запроса
      System.out.println("Creating statement...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);
      //Шаг 5: Извлечение данных из результирующего набора
      while(rs.next()){
         //Искать по имени столбца
         int id = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");
         //Отображение значений
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //Шаг 6: Удаление ресурсов
      rs.close();
      stmt.close();
      conn.close();
   catch(SQLException se){
      //Обработка ошибок JDBC
      se.printStackTrace();
   catch(Exception e){
      e.printStackTrace();
      finally{
   }
      //В конечном итоге предотвращает блокировку ресурсов
      try{
         if(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   //Конец try
   System.out.println("Goodbye!");
//Конец main
//Конец JDBCExample

Теперь, давайте скомпилируем приведенный выше пример, как показано ниже:

C:\>javac JDBCExample.java
C:\>

Время выполненияJDBCExampleЕсли нет проблем, он будет производить следующие результаты, в противном случае будет捕获 соответствующую ошибку и показать сообщение об ошибке -

C:\>java JDBCExample
Соединение с базой данных...
Создание указания...
ID: 100, Возраст: 18, Имя: Zara, Фамилия: Ali
ID: 101, Возраст: 25, Имя: Mahnaz, Фамилия: Fatma
ID: 102, Возраст: 30, Имя: Zaid, Фамилия: Khan
ID: 103, Возраст: 28, Имя: Sumit, Фамилия: Mittal
C:\>

Попробуйте выполнить пример, передавая неправильное имя базы данных или неправильное имя пользователя или пароль, затем проверьте результат.