diff --git a/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java b/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java index f39aa27056..674c183741 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/DB2ExceptionSorter.java @@ -24,9 +24,22 @@ public class DB2ExceptionSorter implements ExceptionSorter { @Override public boolean isExceptionFatal(SQLException e) { + String sqlState = e.getSQLState(); + if (sqlState != null && sqlState.startsWith("08")) { // Connection Exception + return true; + } + int errorCode = e.getErrorCode(); - switch (errorCode) { // THE CURSOR IS NOT IN A PREPARED STATE - case -514: + switch (errorCode) { + case -512: // STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID + case -514: // THE CURSOR IS NOT IN A PREPARED STATE + case -516: // THE DESCRIBE STATEMENT DOES NOT SPECIFY A PREPARED STATEMENT + case -518: // THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT + case -525: // THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE IT WAS IN ERROR AT BIND TIME FOR SECTION = sectno + // PACKAGE = pkgname CONSISTENCY TOKEN = contoken + case -909: // THE OBJECT HAS BEEN DELETED OR ALTERED + case -918: // THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE A CONNECTION HAS BEEN LOST + case -924: // DB2 CONNECTION INTERNAL ERROR, function-code,return-code,reason-code return true; default: break;