How to raise a custom SQLWarning?
Created May 4, 2012
Lennart Jorelid
The SQLWarning class extends SQLException. You may therefore treat it as any normal Exception type with respect to throwing and catching. However, the SQLException class mimics a forward traversable, linked list of Exception objects. The reason for this behavior is that a database generated SQLException rarely occurs alone - one syntactic programming error leads to a suite of SQLException objects being generated. Use the getNextException() method of the SQLException class, as seen in the class structure below:
Class structure of SQLException and SQLWarning |
![]() |
Thus, to create and traverse a custom SQLWarning structure, use code similar to the one below:
Creating SQLWarning |
package se.jguru.dbTests; // Import the SQL classes import java.sql.*; public abstract class RasingACustomSQLWarning { public static void main(String[] args) { try { // Simulate getting the DB data getDataFromDB(); // All OK. System.out.println("Got all data."); } catch(SQLException ex) { // Printout root SQLException System.err.println("An SQL exception occurred: " + ex); // Get all chained SQLExceptions while((ex = ex.getNextException()) != null) { System.err.println("Contained reason: " + ex); } } } private static void getDataFromDB() throws SQLException { // Status flag resulting from database data // should be created from normal business rules in // a live situation. boolean somethingStrangeHappened = true; if(somethingStrangeHappened) { // Create two custom SQL Warnings SQLWarning rootWarning = new SQLWarning("Business rules not properly regarded"); SQLWarning containedWarning = new SQLWarning("Product too cheap!"); // Chain the warnings rootWarning.setNextWarning(containedWarning); // Notify the caller of the warnings throw rootWarning; } } } |