2013-06-29 9 views

Odpowiedz

12

Metoda podaje przyczynę - o ile w ogóle - tej konkretnej SQLException. Z drugiej strony podczas przetwarzania jest całkowicie możliwe, że występuje wiele wyjątków, pomyśl o przetwarzaniu wsadowym, błędach serwerów dla wielu parametrów zapytania (np. Zbyt długie, błędy konwersji itp.).

Te liczne wyjątki znajdują się na tym samym poziomie (nie są ze sobą powiązane), dlatego są dodawane do łańcucha SQLException s. Głowa tego łańcucha jest wyjątkiem, który jest rzucany. Aby przejść do innych numerów SQLException w łańcuchu, należy użyć getNextException(). Np

try { 
    // Something that produces multiple SQLExceptions 
} catch (SQLException e) { 
    SQLException current = e; 
    do { 
     // do something with current 
    } while ((current = current.getNextException()) != null) 
} 

Z drugiej strony, SQLException ma także sposób public Iterator<Throwable> iterator() (wprowadzone w Javie 6/JDBC4), Ta iteracje nad każdym SQLException i ich przyczyn przed przejściem do następnego SQLException w łańcuchu.

5

Operacja SQL może się nie powieść z kilku niezależnych powodów - na przykład można próbować zaktualizować wiele wierszy, a trzy nie istnieją. Te trzy awarie są niezależne - żaden z nich nie powoduje drugiego. To jest miejsce, gdzie getNextException() jest odpowiednie - i możesz użyć setNextException() podczas konstruowania wyjątku.

Z drugiej strony, jeśli cała operacja nie powiodła ponieważ nastąpił IOException kiedy mówi do bazy danych, która jest przyczyną - jedynym powodem SQLException wystąpił był ponieważ IOException miejsce. Tam jest odpowiednie ustawienie getCause() - przekazanie przyczyny do konstruktora po utworzeniu SQLException.

5

Wykonanie instrukcji SQL może spowodować wiele wyjątków SQLEx, w szczególności jeśli jest to instrukcja wsadowa. Załóżmy, że wstawiasz 10 wierszy w jednej i dwóch błędach: dostaniesz jeden wyjątek, który powie ci, że partia nie powiodła się i że powinieneś użyć metody getNextException, aby uzyskać dostęp do szczegółów. Może to jednak zależeć od sterownika bazy danych.

Przyczyna wyjątku jest używana podczas zawijania jednego wyjątku w innym, na przykład w celu zgłoszenia wyjątku dotyczącego aplikacji, który został spowodowany przez wyjątek IO lub SQLException.