diff -r fd16c54261b3 -r 90ce3da70b43 jdk/src/share/classes/java/sql/SQLException.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/sql/SQLException.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,375 @@ +/* + * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package java.sql; + +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; + +/** + *
An exception that provides information on a database access + * error or other errors. + * + *
Each SQLException
provides several kinds of information:
+ *
getMesasge
.
+ * DatabaseMetaData
method getSQLStateType
+ * can be used to discover whether the driver returns the XOPEN type or
+ * the SQL:2003 type.
+ * SQLException
.
+ * SQLException
object with a given
+ * reason
, SQLState
and
+ * vendorCode
.
+ *
+ * The cause
is not initialized, and may subsequently be
+ * initialized by a call to the
+ * {@link Throwable#initCause(java.lang.Throwable)} method.
+ *
+ * @param reason a description of the exception
+ * @param SQLState an XOPEN or SQL:2003 code identifying the exception
+ * @param vendorCode a database vendor-specific exception code
+ */
+ public SQLException(String reason, String SQLState, int vendorCode) {
+ super(reason);
+ this.SQLState = SQLState;
+ this.vendorCode = vendorCode;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ DriverManager.println("SQLState(" + SQLState +
+ ") vendor code(" + vendorCode + ")");
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+
+ /**
+ * Constructs a SQLException
object with a given
+ * reason
and SQLState
.
+ *
+ * The cause
is not initialized, and may subsequently be
+ * initialized by a call to the
+ * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code
+ * is initialized to 0.
+ *
+ * @param reason a description of the exception
+ * @param SQLState an XOPEN or SQL:2003 code identifying the exception
+ */
+ public SQLException(String reason, String SQLState) {
+ super(reason);
+ this.SQLState = SQLState;
+ this.vendorCode = 0;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ DriverManager.println("SQLException: SQLState(" + SQLState + ")");
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object with a given
+ * reason
. The SQLState
is initialized to
+ * null
and the vender code is initialized to 0.
+ *
+ * The cause
is not initialized, and may subsequently be
+ * initialized by a call to the
+ * {@link Throwable#initCause(java.lang.Throwable)} method.
+ *
+ * @param reason a description of the exception
+ */
+ public SQLException(String reason) {
+ super(reason);
+ this.SQLState = null;
+ this.vendorCode = 0;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object.
+ * The reason
, SQLState
are initialized
+ * to null
and the vendor code is initialized to 0.
+ *
+ * The cause
is not initialized, and may subsequently be
+ * initialized by a call to the
+ * {@link Throwable#initCause(java.lang.Throwable)} method.
+ *
+ */
+ public SQLException() {
+ super();
+ this.SQLState = null;
+ this.vendorCode = 0;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object with a given
+ * cause
.
+ * The SQLState
is initialized
+ * to null
and the vendor code is initialized to 0.
+ * The reason
is initialized to null
if
+ * cause==null
or to cause.toString()
if
+ * cause!=null
.
+ *
+ * @param cause the underlying reason for this SQLException
+ * (which is saved for later retrieval by the getCause()
method);
+ * may be null indicating the cause is non-existent or unknown.
+ * @since 1.6
+ */
+ public SQLException(Throwable cause) {
+ super(cause);
+
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object with a given
+ * reason
and cause
.
+ * The SQLState
is initialized to null
+ * and the vendor code is initialized to 0.
+ *
+ * @param reason a description of the exception.
+ * @param cause the underlying reason for this SQLException
+ * (which is saved for later retrieval by the getCause()
method);
+ * may be null indicating the cause is non-existent or unknown.
+ * @since 1.6
+ */
+ public SQLException(String reason, Throwable cause) {
+ super(reason,cause);
+
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object with a given
+ * reason
, SQLState
and cause
.
+ * The vendor code is initialized to 0.
+ *
+ * @param reason a description of the exception.
+ * @param sqlState an XOPEN or SQL:2003 code identifying the exception
+ * @param cause the underlying reason for this SQLException
+ * (which is saved for later retrieval by the
+ * getCause()
method); may be null indicating
+ * the cause is non-existent or unknown.
+ * @since 1.6
+ */
+ public SQLException(String reason, String sqlState, Throwable cause) {
+ super(reason,cause);
+
+ this.SQLState = sqlState;
+ this.vendorCode = 0;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ printStackTrace(DriverManager.getLogWriter());
+ DriverManager.println("SQLState(" + SQLState + ")");
+ }
+ }
+ }
+
+ /**
+ * Constructs a SQLException
object with a given
+ * reason
, SQLState
, vendorCode
+ * and cause
.
+ *
+ * @param reason a description of the exception
+ * @param sqlState an XOPEN or SQL:2003 code identifying the exception
+ * @param vendorCode a database vendor-specific exception code
+ * @param cause the underlying reason for this SQLException
+ * (which is saved for later retrieval by the getCause()
method);
+ * may be null indicating the cause is non-existent or unknown.
+ * @since 1.6
+ */
+ public SQLException(String reason, String sqlState, int vendorCode, Throwable cause) {
+ super(reason,cause);
+
+ this.SQLState = sqlState;
+ this.vendorCode = vendorCode;
+ if (!(this instanceof SQLWarning)) {
+ if (DriverManager.getLogWriter() != null) {
+ DriverManager.println("SQLState(" + SQLState +
+ ") vendor code(" + vendorCode + ")");
+ printStackTrace(DriverManager.getLogWriter());
+ }
+ }
+ }
+
+ /**
+ * Retrieves the SQLState for this SQLException
object.
+ *
+ * @return the SQLState value
+ */
+ public String getSQLState() {
+ return (SQLState);
+ }
+
+ /**
+ * Retrieves the vendor-specific exception code
+ * for this SQLException
object.
+ *
+ * @return the vendor's error code
+ */
+ public int getErrorCode() {
+ return (vendorCode);
+ }
+
+ /**
+ * Retrieves the exception chained to this
+ * SQLException
object by setNextException(SQLException ex).
+ *
+ * @return the next SQLException
object in the chain;
+ * null
if there are none
+ * @see #setNextException
+ */
+ public SQLException getNextException() {
+ return (next);
+ }
+
+ /**
+ * Adds an SQLException
object to the end of the chain.
+ *
+ * @param ex the new exception that will be added to the end of
+ * the SQLException
chain
+ * @see #getNextException
+ */
+ public void setNextException(SQLException ex) {
+
+ SQLException current = this;
+ for(;;) {
+ SQLException next=current.next;
+ if (next != null) {
+ current = next;
+ continue;
+ }
+
+ if (nextUpdater.compareAndSet(current,null,ex)) {
+ return;
+ }
+ current=current.next;
+ }
+ }
+
+ /**
+ * Returns an iterator over the chained SQLExceptions. The iterator will
+ * be used to iterate over each SQLException and its underlying cause
+ * (if any).
+ *
+ * @return an iterator over the chained SQLExceptions and causes in the proper
+ * order
+ *
+ * @since 1.6
+ */
+ public Iterator