# Example of processing SQLExceptions

A single error can generate more than one SQLException. Use a loop and the `getNextException` method to process all `SQLExceptions` in the chain. In many cases, the second exception in the chain is the pertinent one.

The following is an example:

    catch (Throwable e) {
        System.out.println("exception thrown:");
        errorPrint(e);
    }
    static void errorPrint(Throwable e) {
        if (e instanceof SQLException)
            SQLExceptionPrint((SQLException)e);
        else
            System.out.println("A non-SQL error: " + e.toString());
    }
    static void SQLExceptionPrint(SQLException sqle) {
        while (sqle != null) {
            System.out.println("\n---SQLException Caught---\n");
            System.out.println("SQLState:   " + (sqle).getSQLState());
            System.out.println("Severity: " + (sqle).getErrorCode());
            System.out.println("Message:  " + (sqle).getMessage());
            sqle.printStackTrace();
            sqle = sqle.getNextException();
        }
    }

If your application runs on JDK 1.4 or higher, then the SQLException may wrap another, triggering exception, like an IOException. To inspect this additional, wrapped error, call the SQLException's getCause method.

See also "Derby Exception Messages and SQL States", in the Derby Reference Manual.

Parent topic: Information provided in SQL Exceptions