/** Copyright (c) 1996, 2014, Oracle and/or its affiliates. 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. Oracle designates this* particular file as subject to the "Classpath" exception as provided* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.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;/*** <P>An exception that provides information on a database access* error or other errors.** <P>Each <code>SQLException</code> provides several kinds of information:* <UL>* <LI> a string describing the error. This is used as the Java Exception* message, available via the method <code>getMessage</code>.* <LI> a "SQLstate" string, which follows either the XOPEN SQLstate conventions* or the SQL:2003 conventions.* The values of the SQLState string are described in the appropriate spec.* The <code>DatabaseMetaData</code> method <code>getSQLStateType</code>* can be used to discover whether the driver returns the XOPEN type or* the SQL:2003 type.* <LI> an integer error code that is specific to each vendor. Normally this will* be the actual error code returned by the underlying database.* <LI> a chain to a next Exception. This can be used to provide additional* error information.* <LI> the causal relationship, if any for this <code>SQLException</code>.* </UL>** @since 1.1*/public class SQLException extends java.lang.Exceptionimplements Iterable<Throwable> {/*** Constructs a <code>SQLException</code> object with a given* <code>reason</code>, <code>SQLState</code> and* <code>vendorCode</code>.** The <code>cause</code> 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 <code>SQLException</code> object with a given* <code>reason</code> and <code>SQLState</code>.** The <code>cause</code> 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 <code>SQLException</code> object with a given* <code>reason</code>. The <code>SQLState</code> is initialized to* <code>null</code> and the vendor code is initialized to 0.** The <code>cause</code> 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 <code>SQLException</code> object.* The <code>reason</code>, <code>SQLState</code> are initialized* to <code>null</code> and the vendor code is initialized to 0.** The <code>cause</code> 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 <code>SQLException</code> object with a given* <code>cause</code>.* The <code>SQLState</code> is initialized* to <code>null</code> and the vendor code is initialized to 0.* The <code>reason</code> is initialized to <code>null</code> if* <code>cause==null</code> or to <code>cause.toString()</code> if* <code>cause!=null</code>.** @param cause the underlying reason for this <code>SQLException</code>* (which is saved for later retrieval by the <code>getCause()</code> 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 <code>SQLException</code> object with a given* <code>reason</code> and <code>cause</code>.* The <code>SQLState</code> is initialized to <code>null</code>* and the vendor code is initialized to 0.** @param reason a description of the exception.* @param cause the underlying reason for this <code>SQLException</code>* (which is saved for later retrieval by the <code>getCause()</code> 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 <code>SQLException</code> object with a given* <code>reason</code>, <code>SQLState</code> and <code>cause</code>.* 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 <code>SQLException</code>* (which is saved for later retrieval by the* <code>getCause()</code> 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 <code>SQLException</code> object with a given* <code>reason</code>, <code>SQLState</code>, <code>vendorCode</code>* and <code>cause</code>.** @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 <code>SQLException</code>* (which is saved for later retrieval by the <code>getCause()</code> 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 <code>SQLException</code> object.** @return the SQLState value*/public String getSQLState() {return (SQLState);}/*** Retrieves the vendor-specific exception code* for this <code>SQLException</code> object.** @return the vendor's error code*/public int getErrorCode() {return (vendorCode);}/*** Retrieves the exception chained to this* <code>SQLException</code> object by setNextException(SQLException ex).** @return the next <code>SQLException</code> object in the chain;* <code>null</code> if there are none* @see #setNextException*/public SQLException getNextException() {return (next);}/*** Adds an <code>SQLException</code> object to the end of the chain.** @param ex the new exception that will be added to the end of* the <code>SQLException</code> 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<Throwable> iterator() {return new Iterator<Throwable>() {SQLException firstException = SQLException.this;SQLException nextException = firstException.getNextException();Throwable cause = firstException.getCause();public boolean hasNext() {if(firstException != null || nextException != null || cause != null)return true;return false;}public Throwable next() {Throwable throwable = null;if(firstException != null){throwable = firstException;firstException = null;}else if(cause != null){throwable = cause;cause = cause.getCause();}else if(nextException != null){throwable = nextException;cause = nextException.getCause();nextException = nextException.getNextException();}elsethrow new NoSuchElementException();return throwable;}public void remove() {throw new UnsupportedOperationException();}};}/*** @serial*/private String SQLState;/*** @serial*/private int vendorCode;/*** @serial*/private volatile SQLException next;private static final AtomicReferenceFieldUpdater<SQLException,SQLException> nextUpdater =AtomicReferenceFieldUpdater.newUpdater(SQLException.class,SQLException.class,"next");private static final long serialVersionUID = 2135244094396331484L;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。