📄 jdbcconnection.java
字号:
/* Copyright (c) 2001-2005, The HSQL Development Group * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the HSQL Development Group nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */package org.hsqldb.jdbc;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.SQLWarning;import java.sql.Statement;//#ifdef JDBC3import java.sql.Savepoint;//#endif JDBC3//#ifdef JAVA2import java.util.Map;//#endif JAVA2import java.util.Locale;import org.hsqldb.DatabaseManager;import org.hsqldb.DatabaseURL;import org.hsqldb.HSQLClientConnection;import org.hsqldb.HTTPClientConnection;import org.hsqldb.HsqlException;import org.hsqldb.persist.HsqlProperties;import org.hsqldb.Result;import org.hsqldb.ResultConstants;import org.hsqldb.Session;import org.hsqldb.SessionInterface;import org.hsqldb.Trace;import org.hsqldb.lib.StringUtil;// fredt@users 20020320 - patch 1.7.0 - JDBC 2 support and error trapping// JDBC 2 methods can now be called from jdk 1.1.x - see javadoc comments// boucherb@users 20020509 - added "throws SQLException" to all methods where// it was missing here but specified in the java.sql.Connection interface,// updated generic documentation to JDK 1.4, and added JDBC3 methods and docs// boucherb@users and fredt@users 20020505 - extensive review and update// of docs and behaviour to comply with java.sql specification// fredt@users 20020830 - patch 487323 by xclayl@users - better synchronization// fredt@users 20020930 - patch 1.7.1 - support for connection properties// kneedeepincode@users 20021110 - patch 635816 - correction to properties// unsaved@users 20021113 - patch 1.7.2 - SSL support// boucherb@users 2003 ??? - patch 1.7.2 - SSL support moved to factory interface// fredt@users 20030620 - patch 1.7.2 - reworked to use a SessionInterface// boucherb@users 20030801 - JavaDoc updates to reflect new connection urls// boucherb@users 20030819 - patch 1.7.2 - partial fix for broken nativeSQL method// boucherb@users 20030819 - patch 1.7.2 - SQLWarning cases implemented/** * <!-- start generic documentation --> * A connection (session) with a specific database. Within the context * of a Connection, SQL statements are executed and results * are returned. <p> * * A Connection's database is able to provide information describing * its tables, its supported SQL grammar, its stored procedures, the * capabilities of this connection, and so on. This information is * obtained with the <code>getMetaData</code> method. <p> * * <B>Note:</B> By default the Connection automatically commits * changes after executing each statement. If auto commit has been * disabled, an explicit commit must be done or database changes will * not be saved. <p> * * <!-- end generic documentation --> * <!-- start release-specific documentation --> * <div class="ReleaseSpecificDocumentation"> * * <hr> * * <b>HSQLDB-Specific Information:</b> <p> * * To get a <code>Connection</code> to an HSQLDB database, the * following code may be used (updated to reflect the most recent * recommendations): <p> * * <hr> * * When using HSQLDB, the database connection <b><url></b> must start with * <b>'jdbc:hsqldb:'</b><p> * * Since 1.7.2, connection properties (<key-value-pairs>) may be appended * to the database connection <b><url></b>, using the form: <p> * * <blockquote> * <b>'<url>[;key=value]*'</b> * </blockquote> <p> * * Also since 1.7.2, the allowable forms of the HSQLDB database connection * <b><url></b> have been extended. However, all legacy forms continue * to work, with unchanged semantics. The extensions are as described in the * following material. <p> * * <hr> * * <b>Network Server Database Connections:</b> <p> * * The 1.7.2 {@link Server Server} database connection <b><url></b> has * changed to take one of the two following forms: <p> * * <div class="GeneralExample"> * <ol> * <li> <b>'jdbc:hsqldb:hsql://host[:port][/<alias>][<key-value-pairs>]'</b> * * <li> <b>'jdbc:hsqldb:hsqls://host[:port][/<alias>][<key-value-pairs>]'</b> * (with TLS). * </ol> * </div> <p> * * The 1.7.2 {@link WebServer WebServer} database connection <b><url></b> * also changes to take one of two following forms: <p> * * <div class="GeneralExample"> * <ol> * <li> <b>'jdbc:hsqldb:http://host[:port][/<alias>][<key-value-pairs>]'</b> * * <li> <b>'jdbc:hsqldb:https://host[:port][/<alias>][<key-value-pairs>]'</b> * (with TLS). * </ol> * </div><p> * * In both network server database connection <b><url></b> forms, the * optional <b><alias></b> component is used to identify one of possibly * several database instances available at the indicated host and port. If the * <b><alias></b> component is omitted, then a connection is made to the * network server's default database instance. <p> * * For more information on server configuration regarding mounting multiple * databases and assigning them <b><alias></b> values, please read the * Java API documentation for {@link org.hsqldb.Server Server} and related * chapters in the general documentation, especially the Advanced Users * Guide. <p> * * <hr> * * <b>Transient, In-Process Database Connections:</b> <p> * * The 1.7.2 100% in-memory (transient, in-process) database connection * <b><url></b> takes one of the two following forms: <p> * * <div class="GeneralExample"> * <ol> * <li> <b>'jdbc:hsqldb:.[<key-value-pairs>]'</b> * (the legacy form, extended) * * <li> <b>'jdbc:hsqldb:mem:<alias>[<key-value-pairs>]'</b> * (the new form) * </ol> * </div> <p> * * With the 1.7.2 transient, in-process database connection <b><url></b>, * the <b><alias></b> component is the key used to look up a transient, * in-process database instance amongst the collection of all such instances * already in existence within the current class loading context in the * current JVM. If no such instance exists, one <em>may</em> be automatically * created and mapped to the <b><alias></b>, as governed by the * <b>'ifexists=true|false'</b> connection property. <p> * * <hr> * * <b>Persistent, In-Process Database Connections:</b> <p> * * The 1.7.2 standalone (persistent, in-process) database connection * <b><url></b> takes one of the three following forms: <p> * * <div class="GeneralExample"> * <ol> * <li> <b>'jdbc:hsqldb:<path>[<key-value-pairs>]'</b> * (the legacy form, extended) * * <li> <b>'jdbc:hsqldb:file:<path>[<key-value-pairs>]'</b> * (same semantics as the legacy form) * * <li> <b>'jdbc:hsqldb:res:<path>[<key-value-pairs>]'</b> * (new form with 'files_in_jar' semantics) * </ol> * </div> <p> * * For the persistent, in-process database connection <b><url></b>, * the <b><path></b> component is the path prefix common to all of * the files that compose the database. <p> * * As of 1.7.2, although other files may be involved (such as transient working * files and/or TEXT table CSV data source files), the essential set that may, * at any particular point in time, compose an HSQLDB database are: <p> * * <div class="GeneralExample"> * <ul> * <li><path>.properties * <li><path>.script * <li><path>.log * <li><path>.data * <li><path>.backup * <li><path>.lck * </ul> * </div> <p> * * For example: <b>'jdbc:hsqldb:file:test'</b> connects to a database * composed of some subset of the files listed above, where the expansion * of <b><path></b> is <b>'test'</b> prefixed with the path of the * working directory fixed at the time the JVM is started. <p> * * Under <em>Windows</em> <sup><font size="-2">TM</font> </sup>, <b> * 'jdbc:hsqldb:file:c:\databases\test'</b> connects to a database located * on drive <b>'C:'</b> in the directory <b>'databases'</b>, composed * of some subset of the files: <p> * * <pre class="GeneralExample"> * C:\ * +--databases\ * +--test.properties * +--test.script * +--test.log * +--test.data * +--test.backup * +--test.lck * </pre> * * Under most variations of UNIX, <b>'jdbc:hsqldb:file:/databases/test'</b> * connects to a database located in the directory <b>'databases'</b> directly * under root, once again composed of some subset of the files: <p> * * <pre class="GeneralExample"> * / * +--databases/ * +--test.properties * +--test.script * +--test.log * +--test.data * +--test.backup * +--test.lck * </pre> * * <b>Some Guidelines:</b> <p> * * <ol> * <li> Both relative and absolute database file paths are supported. <p> * * <li> Relative database file paths can be specified in a platform independent * manner as: <b>'[dir1/dir2/.../dirn/]<file-name-prefix>'</b>. <p> * * <li> Specification of absolute file paths is operating-system specific.<br> * Please read your OS file system documentation. <p> * * <li> Specification of network mounts may be operating-system specific.<br> * Please read your OS file system documentation. <p> * * <li> Special care may be needed w.r.t. file path specifications * containing whitespace, mixed-case, special characters and/or * reserved file names.<br> * Please read your OS file system documentation. <p> * </ol> <p> * * <b>Note:</b> Versions of HSQLDB previous to 1.7.0 did not support creating * directories along the file path specified in the persistent, in-process mode * database connection <b><url></b> form, in the case that they did * not already exist. Starting with HSQLDB 1.7.0, directories <i>will</i> * be created if they do not already exist., but only if HSQLDB is built under * a version of the compiler greater than JDK 1.1.x. <p> * * <b>res: Connections</b><p> * * The new <b>'jdbc:hsqldb:res:<path>'</b> database connection * <b><url></b> has different semantics than the * <b>'jdbc:hsqldb:file:<path>'</b> form. The semantics are similar to * those of a <b>'files_readonly'</b> database, but with some additional * points to consider. <p> * * Specifically, the <b>'<path>'</b> component of a <b>res:</b> type * database connection <b><url></b> is used to obtain resource URL * objects and thereby read the database files as resources on the class path. * Moreover, the URL objects <i>must</i> point only to resources contained * in one or more jars on the class path (must be jar protocol). <p> * * This restriction is enforced to avoid the unfortunate situation in which, * because <b>res:</b> database instances do not create a <path>.lck file * (they are strictly files-read-only) and because the <b><path></b> * components of <b>res:</b> and <b>file:</b> database URIs are not checked * for file system equivalence, it is possible for the same database files to * be accessed concurrently by both <b>file:</b> and <b>res:</b> database * instances. That is, without this restriction, it is possible that * <path>.data and <path>.properties file content may be written * by a <b>file:</b> database instance without the knowlege or cooperation * of a <b>res:</b> database instance open on the same files, potentially * resulting in unexpected database errors, inconsistent operation * and/or data corruption. <p> * * In short, a <b>res:</b> type database connection <b><url></b> is * designed specifically to connect to a <b>'files_in_jar'</b> mode database * instance, which in turn is designed specifically to operate under * <em>Java WebStart</em><sup><font size="-2">TM</font></sup> and * <em>Java Applet</em><sup><font size="-2">TM</font></sup>configurations, * where co-locating the database files in the jars that make up the * <em>WebStart</em> application or Applet avoids the need for special security * configuration or code signing. <p> * * <b>Note:</b> Since it is difficult and often nearly impossible to determine * or control at runtime from where all classes are being loaded or which class * loader is doing the loading under <b>'files_in_jar'</b> semantics, the * <b><path></b> component of the res: database connection
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -