All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kawanfw.sql.api.client.RemoteConnection Maven / Gradle / Ivy

/*
 * This file is part of AceQL. 
 * AceQL: Remote JDBC access over HTTP.                                     
 * Copyright (C) 2015,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                                
 *                                                                               
 * AceQL is free software; you can redistribute it and/or                 
 * modify it under the terms of the GNU Lesser General Public                    
 * License as published by the Free Software Foundation; either                  
 * version 2.1 of the License, or (at your option) any later version.            
 *                                                                               
 * AceQL 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             
 * Lesser General Public License for more details.                               
 *                                                                               
 * You should have received a copy of the GNU Lesser General Public              
 * License along with this library; if not, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.kawanfw.sql.api.client;

import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Struct;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import org.kawanfw.commons.api.client.RemoteException;
import org.kawanfw.commons.api.client.SessionParameters;
import org.kawanfw.file.api.client.RemoteSession;
import org.kawanfw.sql.jdbc.ConnectionHttp;

/**
 * Provides a Connection implementation that enable to use a
 * virtual JDBC Connection that is mapped to a Server JDBC
 * Connection in order to access a remote SQL database through
 * HTTP.
 * 

* This Connection implementation supports: *

    *
  • Main JDBC data formats.
  • *
  • Blob/Clob updates with clean streaming behavior when * uploading.
  • *
  • Blob/Clob reads with clean streaming behavior when * downloading.
  • *
  • Transaction through commit and rollback orders. *
  • *
*

* Supplementary specific methods that are not of instance of Connection are * also added. * * After creating the RemoteConnection, just use it like a regular * Connection to execute your PreparedStatement and * Statement, and to navigate through your ResultSet. *

* All thrown exceptions are of type {@link SQLException}. Use * {@link SQLException#getCause()} to get the original wrapped Exception.
* If an Exception is thrown by the remote server, the original Exception will * be a {@link RemoteException}. The cause will be available with * {@link RemoteException#getCause()} and the remote stack trace as a string * available with {@link RemoteException#getRemoteStackTrace()} *

* The SQL Exceptions specific to a product failure all start with the * "[KAWANSOFT FRAMEWORK FAILURE]" string. *

* Example:

* *
 * // Define URL of the path to the ServerSqlManager Servlet and prefix
 * // it with with "jdbc:aceql:"
 * // We will use a secure SSL/TLS session. All uploads/downloads of SQL
 * // commands & data will be encrypted.
 * String url = "jdbc:aceql:https://www.acme.org:9443/ServerSqlManager";
 * 
 * // The login info for strong authentication on server side.
 * // These are *not* the username/password of the remote JDBC Driver,
 * // but are the auth info checked by remote
 * // CommonsConfigurator.login(username, password) method.
 * String username = "MyUsername";
 * String password = "MyPsassword";
 * 
 * // Required for Android, optional for others environments:
 * Class.forName("org.kawanfw.sql.api.client.RemoteDriver");
 * 
 * // Attempts to establish a connection to the remote database:
 * Connection connection = DriverManager.getConnection(url, username, password);
 * 
 * // We can now use our remote JDBC Connection as a regular JDBC
 * // Connection for our queries and updates:
 * String sql = "SELECT CUSTOMER_ID, FNAME, LNAME FROM CUSTOMER "
 * 	+ "WHERE CUSTOMER_ID = ?";
 * PreparedStatement prepStatement = connection.prepareStatement(sql);
 * prepStatement.setInt(1, 1);
 * 
 * ResultSet rs = prepStatement.executeQuery();
 * while (rs.next()) {
 *     String customerId = rs.getString("customer_id");
 *     String fname = rs.getString("fname");
 *     String lname = rs.getString("lname");
 * 
 *     System.out.println("customer_id: " + customerId);
 *     System.out.println("fname      : " + fname);
 *     System.out.println("lname      : " + lname);
 *     // Etc.
 * }
 * 
* *
*

* The following dedicated RemoteConnection methods are specific to * the software and may be accessed with a cast: *

    *
  • {@link #clone}
  • *
  • {@link #getRemoteSession}
  • *
  • {@link #getSessionParameters}
  • *
  • {@link #getProxy}
  • *
  • {@link #getHttpStatusCode}
  • *
  • {@link #getMaxStatementsForMemoryTransport}
  • *
  • {@link #getUrl}
  • *
  • {@link #getUsername}
  • *
  • {@link #getVersion}
  • *
  • {@link #isEncryptStatementParameters}
  • *
  • {@link #isStatelessMode()}
  • *
  • {@link #setCancelled(AtomicBoolean)}
  • *
  • {@link #setEncryptStatementParameters}
  • *
  • {@link #setMaxStatementsForMemoryTransport}
  • *
  • {@link #setProgress(AtomicInteger)}
  • *
*

*
* All long Blobs update/reading that need to be run on a separated thread may * be followed in Swing using a JProgressBar, * ProgressMonitor or Android using a {@code ProgressDialog} *

* This is done by sharing two atomic variables that will be declared as fields: *

    *
  • An {@code AtomicInteger} that represents the Blob/Clob transfer progress * between 0 and 100.
  • *
  • An {@code AtomicBoolean} that says if the end user has cancelled the * Blob/Clob transfer.
  • *
*

* The atomic variables values will be shared by AceQL download/upload processes * and by the Progress Monitor used for the Progress Bar. The values are to be * initialized and passed to {@code RemoteConnection} before the JDBC actions * with the setters:
* {@link RemoteConnection#setProgress(AtomicInteger)}
* {@link RemoteConnection#setCancelled(AtomicBoolean)} *

* * Example:

* *
 * // Attempts to establish a connection to the remote database:
 * Connection connection = DriverManager.getConnection(url, username, password);
 * 
 * // Pass the mutable & sharable progress and canceled to the
 * // underlying RemoteConnection.
 * // - progress value will be updated by the RemoteConnection and
 * // retrieved by progress monitors to increment the progress.
 * // - cancelled value will be updated to true if user cancels the
 * // task and RemoteConnection will interrupt the blob(s) transfer.
 * 
 * ((RemoteConnection) connection).setProgress(progress);
 * ((RemoteConnection) connection).setCancelled(cancelled);
 * 
 * // Execute JDBC statement
 * 
* *
See the source code of SqlProgressMonitorDemo.java that demonstrates the use of atomic * variables when inserting a Blob. * * @author Nicolas de Pomereu * @since 1.0 * */ public class RemoteConnection implements Connection { /** The ConnectionHttp to wrap as clean as possible */ private ConnectionHttp connectionHttp = null; /** * Package protected class to be used only by * {@link RemoteDriver#connect(String, Properties)} * * Creates a remote Connection with a proxy, http protocol * parameters, and boolean to say if session is in Stateless Mode. * * @param url * the URL of the path to the ServerSqlManager Servlet * @param username * the user username for authentication * @param password * the authentication password * @param proxy * the proxy to use, null for direct access * @param passwordAuthentication * the proxy credentials, null if no proxy or if the proxy does * not require authentication * * @param sessionParameters * the http protocol parameters to set (maybe null if none) * @param statelessMode * if true, session will be stateless. * @param joinResultSetMetaData * if true, ResultSet.getMetaData() will be downloaded along with * ResultSet when a SELECT is sent to the server * @throws IllegalArgumentException * if url, username, password is null * * @throws SQLException * if any Exception occurs. The * SQLException wraps the original * Exception that may be accessed using * getCause() */ RemoteConnection(String url, String username, char[] password, Proxy proxy, PasswordAuthentication passwordAuthentication, SessionParameters sessionParameters, boolean statelessMode, boolean joinResultSetMetaData) throws SQLException { connectionHttp = new ConnectionHttp(url, username, password, proxy, passwordAuthentication, sessionParameters, statelessMode, joinResultSetMetaData); } // /** // * Creates a remote Connection with a proxy, http protocol // * parameters, and boolean to say if session is in Stateless Mode. // * // * @param url // * the URL of the path to the ServerSqlManager Servlet // * @param username // * the user username for authentication // * @param password // * the authentication password // * @param httpProxy // * the proxy parameters (maybe null if none) // * @param sessionParameters // * the http protocol parameters to set (maybe null if none) // * @param statelessMode // * if true, session will be stateless. // * // * @throws IllegalArgumentException // * if url, username, password is null // * // * @throws SQLException // * if any Exception occurs. The // * SQLException wraps the original // * Exception that may be accessed using // * getCause() // * @deprecated As of version 2.7, replaced by // * {@code DriverManager.getConnection(url, info)}. // */ // // public RemoteConnection(String url, String username, char[] password, // HttpProxy httpProxy, SessionParameters sessionParameters, // boolean statelessMode) throws SQLException { // // connectionHttp = new ConnectionHttp(url, username, password, httpProxy, // sessionParameters, statelessMode, false); // } // /** // * Creates a remote Connection with a proxy and http protocol // * parameters. // * // * @param url // * the URL of the path to the ServerSqlManager Servlet // * @param username // * the user username for authentication // * @param password // * the authentication password // * @param httpProxy // * the proxy parameters (maybe null if none) // * @param sessionParameters // * the http protocol parameters to set (maybe null if none) // * // * @throws IllegalArgumentException // * if url, username, password is null // * // * @throws SQLException // * if any Exception occurs. The // * SQLException wraps the original // * Exception that may be accessed using // * getCause() // * @deprecated As of version 2.7, replaced by // * {@code DriverManager.getConnection(url, info)}. // */ // // @Deprecated // public RemoteConnection(String url, String username, char[] password, // HttpProxy httpProxy, SessionParameters sessionParameters) // throws SQLException { // this(url, username, password, httpProxy, sessionParameters, false); // // } // /** // * Creates a remote Connection with a proxy. // * // * @param url // * the URL of the path to the ServerSqlManager Servlet // * @param username // * the user username for authentication // * @param password // * the authentication password // * @param httpProxy // * the proxy parameters (maybe null if none) // * // * @throws SQLException // * if any Exception occurs. The // * SQLException wraps the original // * Exception that may be accessed using // * getCause() // * @deprecated As of version 2.7, replaced by // * {@code DriverManager.getConnection(url, info)}. // */ // @Deprecated // public RemoteConnection(String url, String username, char[] password, // HttpProxy httpProxy) throws SQLException { // this(url, username, password, httpProxy, null); // } // /** // * Creates a remote Connection. // * // * @param url // * the URL of the path to the ServerSqlManager Servlet // * @param username // * the user username for authentication // * @param password // * the authentication password // * // * @throws SQLException // * if any Exception occurs. The // * SQLException wraps the original // * Exception that may be accessed using // * getCause() // * // * @deprecated As of version 2.7, replaced by // * {@code DriverManager.getConnection(url, user, password)}. // */ // @Deprecated // public RemoteConnection(String url, String username, char[] password) // throws SQLException { // this(url, username, password, null, null); // } /** * Private constructor for clone(). * * @param url * the URL of the path to the ServerSqlManager Servlet * @param username * the user username * @param proxy * the proxy to use, null for direct access * @param passwordAuthentication * the proxy credentials, null if no proxy or if the proxy does * not require authentication * @param sessionParameters * the http protocol parameters to set (maybe null if none) * @param statelessMode * says if server is stateless * @param joinResultSetMetaData * if true, ResultSet.getMetaData() will be downloaded along with * ResultSet when a SELECT is sent to the server * @param fileSession * the actual AceQL FILE Session */ private RemoteConnection(String url, String username, Proxy proxy, PasswordAuthentication passwordAuthentication, SessionParameters sessionParameters, RemoteSession remoteSession, boolean statelessMode, boolean joinResultSetMetaData) { connectionHttp = new ConnectionHttp(url, username, proxy, passwordAuthentication, sessionParameters, remoteSession, statelessMode, joinResultSetMetaData); } /** * Sets the shareable canceled variable that will be used by the progress * indicator to notify this instance that the end user has cancelled the * current Blob/Clob upload or download. * * @param cancelled * the shareable variable that will be used by the progress * indicator to notify this instance that the end user has * cancelled the current Blob/Clob upload or download * * @since 1.8 */ public void setCancelled(AtomicBoolean cancelled) { connectionHttp.setCancelled(cancelled); } /** * Sets the shareable progress variable that will store Blob/Clob upload or * download progress between 0 and 100. Will be used by progress indicators * to display the progress. * * @param progress * the shareable progress variable * * @since 1.8 */ public void setProgress(AtomicInteger progress) { connectionHttp.setProgress(progress); } /** * Creates a CallableStatement object for calling database * stored procedures. The CallableStatement object provides * methods for setting up its IN and OUT parameters, and methods for * executing the call to a stored procedure. * *

* Note: This method is optimized for handling stored procedure call * statements. Some drivers may send the call statement to the database when * the method prepareCall is done; others may wait until the * CallableStatement object is executed. This has no direct * effect on users; however, it does affect which method throws certain * SQLExceptions. *

* Result sets created using the returned CallableStatement * object will by default be type TYPE_FORWARD_ONLY and have a * concurrency level of CONCUR_READ_ONLY. * * @param sql * an SQL statement that may contain one or more '?' parameter * placeholders. Typically this statement is a JDBC function call * escape string. * @return a new default CallableStatement object containing * the pre-compiled SQL statement * @exception SQLException * if a database access error occurs */ public CallableStatement prepareCall(String sql) throws SQLException { return this.connectionHttp.prepareCall(sql); } /** * Method not implemented.
*
* Converts the given SQL statement into the system's native SQL grammar. A * driver may convert the JDBC SQL grammar into its system's native SQL * grammar prior to sending it. This method returns the native form of the * statement that the driver would have sent. * * @param sql * an SQL statement that may contain one or more '?' parameter * placeholders * @return the native form of this statement * @exception SQLException * if a database access error occurs */ public String nativeSQL(String sql) throws SQLException { return this.connectionHttp.nativeSQL(sql); } /** * Creates a Statement object for sending SQL statements to the * database. SQL statements without parameters are normally executed using * Statement objects. If the same SQL statement is executed * many times, it may be more efficient to use a * PreparedStatement object. *

* Result sets created using the returned Statement object will * by default be type TYPE_FORWARD_ONLY and have a concurrency * level of CONCUR_READ_ONLY. * * @return a new default Statement object * @exception SQLException * if a database access error occurs */ @Override public Statement createStatement() throws SQLException { return this.connectionHttp.createStatement(); } /** * Creates a Statement object that will generate * ResultSet objects with the given type and concurrency. This * method is the same as the createStatement method above, but * it allows the default result set type and concurrency to be overridden. * The holdability of the created result sets can be determined by calling * {@link #getHoldability}. * * @param resultSetType * a result set type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * a concurrency type; one of * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @return a new Statement object that will generate * ResultSet objects with the given type and * concurrency * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameters are not * ResultSet constants indicating type and * concurrency * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method or this * method is not supported for the specified result set type * and result set concurrency. * @since 1.2 */ public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { return this.connectionHttp.createStatement(resultSetType, resultSetConcurrency); } /** * Creates a Statement object that will generate * ResultSet objects with the given type, concurrency, and * holdability. This method is the same as the createStatement * method above, but it allows the default result set type, concurrency, and * holdability to be overridden. * * @param resultSetType * one of the following ResultSet constants: * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * one of the following ResultSet constants: * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @param resultSetHoldability * one of the following ResultSet constants: * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @return a new Statement object that will generate * ResultSet objects with the given type, concurrency, * and holdability * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameters are not * ResultSet constants indicating type, * concurrency, and holdability * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method or this * method is not supported for the specified result set type, * result set holdability and result set concurrency. * @see ResultSet * @since 1.4 */ public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return this.connectionHttp.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); } /** * Creates a PreparedStatement object for sending parameterized * SQL statements to the database. *

* A SQL statement with or without IN parameters can be pre-compiled and * stored in a PreparedStatement object. This object can then * be used to efficiently execute this statement multiple times. * *

* Note: This method is optimized for handling parametric SQL * statements that benefit from precompilation. If the driver supports * precompilation, the method prepareStatement will send the * statement to the database for precompilation. Some drivers may not * support precompilation. In this case, the statement may not be sent to * the database until the PreparedStatement object is executed. * This has no direct effect on users; however, it does affect which methods * throw certain SQLException objects. *

* Result sets created using the returned PreparedStatement * object will by default be type TYPE_FORWARD_ONLY and have a * concurrency level of CONCUR_READ_ONLY. * * @param sql * an SQL statement that may contain one or more '?' IN parameter * placeholders * @return a new default PreparedStatement object containing * the pre-compiled SQL statement * @exception SQLException * if a database access error occurs */ public PreparedStatement prepareStatement(String sql) throws SQLException { return this.connectionHttp.prepareStatement(sql); } /** * * Creates a PreparedStatement object that will generate * ResultSet objects with the given type and concurrency. This * method is the same as the prepareStatement method above, but * it allows the default result set type and concurrency to be overridden. * The holdability of the created result sets can be determined by calling * {@link #getHoldability}. * * @param sql * a String object that is the SQL statement to be * sent to the database; may contain one or more '?' IN * parameters * @param resultSetType * a result set type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * a concurrency type; one of * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @return a new PreparedStatement object containing the pre-compiled SQL * statement that will produce ResultSet objects with * the given type and concurrency * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameters are not * ResultSet constants indicating type and * concurrency * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method or this * method is not supported for the specified result set type * and result set concurrency. * @since 1.2 */ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { return this.connectionHttp.prepareStatement(sql, resultSetType, resultSetConcurrency); } /** * Creates a CallableStatement object that will generate * ResultSet objects with the given type and concurrency. This * method is the same as the prepareCall method above, but it * allows the default result set type and concurrency to be overridden. * * @param sql * a String object that is the SQL statement to be * sent to the database; may contain on or more ? parameters * @param resultSetType * a result set type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * a concurrency type; one of * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @return a new CallableStatement object containing the * pre-compiled SQL statement that will produce * ResultSet objects with the given type and * concurrency * @exception SQLException * if a database access error occurs or the given parameters * are not ResultSet constants indicating type * and concurrency * @since 1.2 */ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { return this.connectionHttp.prepareCall(sql, resultSetType, resultSetConcurrency); } /** * Method not implemented.
*
* Retrieves the Map object associated with this * Connection object. Unless the application has added an * entry, the type map returned will be empty. * * @return the java.util.Map object associated with this * Connection object * @exception SQLException * if a database access error occurs * @since 1.2 * @see #setTypeMap */ public Map> getTypeMap() throws SQLException { return this.connectionHttp.getTypeMap(); } /** * Creates a PreparedStatement object that will generate * ResultSet objects with the given type, concurrency, and * holdability. *

* This method is the same as the prepareStatement method * above, but it allows the default result set type, concurrency, and * holdability to be overridden. * * @param sql * a String object that is the SQL statement to be * sent to the database; may contain one or more '?' IN * parameters * @param resultSetType * one of the following ResultSet constants: * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * one of the following ResultSet constants: * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @param resultSetHoldability * one of the following ResultSet constants: * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @return a new PreparedStatement object, containing the * pre-compiled SQL statement, that will generate * ResultSet objects with the given type, concurrency, * and holdability * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameters are not * ResultSet constants indicating type, * concurrency, and holdability * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method or this * method is not supported for the specified result set type, * result set holdability and result set concurrency. * @see ResultSet * @since 1.4 */ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return this.connectionHttp.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); } /** * Method not implemented.
*
* Installs the given TypeMap object as the type map for this * Connection object. The type map will be used for the custom * mapping of SQL structured types and distinct types. * * @param map * the java.util.Map object to install as the * replacement for this Connection object's default * type map * @exception SQLException * if a database access error occurs or the given parameter * is not a java.util.Map object * @since 1.2 * @see #getTypeMap */ public void setTypeMap(Map> map) throws SQLException { this.connectionHttp.setTypeMap(map); } /** * Retrieves the current auto-commit mode for this Connection * object. * * @return the current state of this Connection object's * auto-commit mode * @exception SQLException * if a database access error occurs * @see #setAutoCommit */ public boolean getAutoCommit() throws SQLException { return this.connectionHttp.getAutoCommit(); } /** * Creates an unnamed savepoint in the current transaction and returns the * new Savepoint object that represents it. * * @return the new Savepoint object * @exception SQLException * if a database access error occurs or this * Connection object is currently in auto-commit * mode * @see Savepoint * @since 1.4 */ public Savepoint setSavepoint() throws SQLException { return this.connectionHttp.setSavepoint(); } /** * Sets this connection's auto-commit mode to the given state. If a * connection is in auto-commit mode, then all its SQL statements will be * executed and committed as individual transactions. Otherwise, its SQL * statements are grouped into transactions that are terminated by a call to * either the method commit or the method rollback * . By default, new connections are in auto-commit mode. *

* The commit occurs when the statement completes or the next execute * occurs, whichever comes first. In the case of statements returning a * ResultSet object, the statement completes when the last row * of the ResultSet object has been retrieved or the * ResultSet object has been closed. In advanced cases, a * single statement may return multiple results as well as output parameter * values. In these cases, the commit occurs when all results and output * parameter values have been retrieved. *

* NOTE: If this method is called during a transaction, the * transaction is committed. * * @param autoCommit * true to enable auto-commit mode; * false to disable it * @exception SQLException * if a database access error occurs * @see #getAutoCommit */ public void setAutoCommit(boolean autoCommit) throws SQLException { this.connectionHttp.setAutoCommit(autoCommit); } /** * Creates a savepoint with the given name in the current transaction and * returns the new Savepoint object that represents it. * * @param name * a String containing the name of the savepoint * @return the new Savepoint object * @exception SQLException * if a database access error occurs or this * Connection object is currently in auto-commit * mode * @see Savepoint * @since 1.4 */ public Savepoint setSavepoint(String name) throws SQLException { return this.connectionHttp.setSavepoint(name); } /** * Undoes all changes made after the given Savepoint object was * set. *

* This method should be used only when auto-commit has been disabled. * * @param savepoint * the Savepoint object to roll back to * @exception SQLException * if a database access error occurs, the * Savepoint object is no longer valid, or this * Connection object is currently in auto-commit * mode * @see Savepoint * @see #rollback * @since 1.4 */ public void rollback(Savepoint savepoint) throws SQLException { this.connectionHttp.rollback(savepoint); } /** * Makes all changes made since the previous commit/rollback permanent and * releases any database locks currently held by this * Connection object. This method should be used only when * auto-commit mode has been disabled. * * @exception SQLException * if a database access error occurs or this * Connection object is in auto-commit mode * @see #setAutoCommit */ public void commit() throws SQLException { this.connectionHttp.commit(); } /** * Removes the given Savepoint object from the current * transaction. Any reference to the savepoint after it have been removed * will cause an SQLException to be thrown. * * @param savepoint * the Savepoint object to be removed * @exception SQLException * if a database access error occurs or the given * Savepoint object is not a valid savepoint in * the current transaction * @since 1.4 */ public void releaseSavepoint(Savepoint savepoint) throws SQLException { this.connectionHttp.releaseSavepoint(savepoint); } /** * Undoes all changes made in the current transaction and releases any * database locks currently held by this Connection object. * This method should be used only when auto-commit mode has been disabled. * * @exception SQLException * if a database access error occurs or this * Connection object is in auto-commit mode * @see #setAutoCommit */ public void rollback() throws SQLException { this.connectionHttp.rollback(); } /** * Releases this Connection object's database and JDBC * resources immediately instead of waiting for them to be automatically * released. *

* Calling the method close on a Connection object * that is already closed is a no-op. *

* Note: A Connection object is automatically closed * when it is garbage collected. Certain fatal errors also close a * Connection object. * * @exception SQLException * if a database access error occurs */ public void close() throws SQLException { this.connectionHttp.close(); } /** * Retrieves whether this Connection object has been closed. A * connection is closed if the method close has been called on * it or if certain fatal errors have occurred. This method is guaranteed to * return true only when it is called after the method * Connection.close has been called. *

* This method generally cannot be called to determine whether a connection * to a database is valid or invalid. A typical client can determine that a * connection is invalid by catching any exceptions that might be thrown * when an operation is attempted. * * @return true if this Connection object is * closed; false if it is still open * @exception SQLException * if a database access error occurs */ public boolean isClosed() throws SQLException { return this.connectionHttp.isClosed(); } /** * Puts this connection in read-only mode as a hint to the driver to enable * database optimizations. * *

* Note: This method cannot be called during a transaction. * * @param readOnly * true enables read-only mode; false * disables it * @exception SQLException * if a database access error occurs or this method is called * during a transaction */ public void setReadOnly(boolean readOnly) throws SQLException { this.connectionHttp.setReadOnly(readOnly); } /** * Retrieves whether this Connection object is in read-only * mode. * * @return true if this Connection object is * read-only; false otherwise * @exception SQLException * if a database access error occurs */ public boolean isReadOnly() throws SQLException { return this.connectionHttp.isReadOnly(); } /** * Retrieves a DatabaseMetaData object that contains metadata * about the database to which this Connection object * represents a connection. The metadata includes information about the * database's tables, its supported SQL grammar, its stored procedures, the * capabilities of this connection, and so on. * * @return a DatabaseMetaData object for this * Connection object * @exception SQLException * if a database access error occurs */ public DatabaseMetaData getMetaData() throws SQLException { return this.connectionHttp.getMetaData(); } /** * Creates a CallableStatement object that will generate * ResultSet objects with the given type and concurrency. This * method is the same as the prepareCall method above, but it * allows the default result set type, result set concurrency type and * holdability to be overridden. * * @param sql * a String object that is the SQL statement to be * sent to the database; may contain on or more ? parameters * @param resultSetType * one of the following ResultSet constants: * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @param resultSetConcurrency * one of the following ResultSet constants: * ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @param resultSetHoldability * one of the following ResultSet constants: * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @return a new CallableStatement object, containing the * pre-compiled SQL statement, that will generate * ResultSet objects with the given type, concurrency, * and holdability * @exception SQLException * if a database access error occurs or the given parameters * are not ResultSet constants indicating type, * concurrency, and holdability * @see ResultSet * @since 1.4 */ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return this.connectionHttp.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); } /** * Sets the given catalog name in order to select a subspace of this * Connection object's database in which to work. *

* This version does not support catalogs, it will silently ignore this * request. * * @param catalog * the name of a catalog (subspace in this * Connection object's database) in which to work * @exception SQLException * if a database access error occurs * @see #getCatalog */ public void setCatalog(String catalog) throws SQLException { this.connectionHttp.setCatalog(catalog); } /** * Retrieves this Connection object's current catalog name. * * @return the current catalog name or null if there is none * @exception SQLException * if a database access error occurs * @see #setCatalog */ public String getCatalog() throws SQLException { return this.connectionHttp.getCatalog(); } /** * Attempts to change the transaction isolation level for this * Connection object to the one given. The constants defined in * the interface Connection are the possible transaction * isolation levels. *

* Note: If this method is called during a transaction, the result is * implementation-defined. * * @param level * one of the following Connection constants: * Connection.TRANSACTION_READ_UNCOMMITTED, * Connection.TRANSACTION_READ_COMMITTED, * Connection.TRANSACTION_REPEATABLE_READ, or * Connection.TRANSACTION_SERIALIZABLE. (Note that * Connection.TRANSACTION_NONE cannot be used * because it specifies that transactions are not supported.) * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameter is not one * of the Connection constants * @see DatabaseMetaData#supportsTransactionIsolationLevel * @see #getTransactionIsolation */ public void setTransactionIsolation(int level) throws SQLException { this.connectionHttp.setTransactionIsolation(level); } /** * Creates a default PreparedStatement object that has the * capability to retrieve auto-generated keys. Method not implemented . * The given constant tells the driver whether it should make auto-generated * keys available for retrieval. This parameter is ignored if the SQL * statement is not an INSERT statement, or an SQL statement * able to return auto-generated keys (the list of such statements is * vendor-specific). *

* Note: This method is optimized for handling parametric SQL * statements that benefit from precompilation. If the driver supports * precompilation, the method prepareStatement will send the * statement to the database for precompilation. Some drivers may not * support precompilation. In this case, the statement may not be sent to * the database until the PreparedStatement object is executed. * This has no direct effect on users; however, it does affect which methods * throw certain SQLExceptions. *

* Result sets created using the returned PreparedStatement * object will by default be type TYPE_FORWARD_ONLY and have a * concurrency level of CONCUR_READ_ONLY. The holdability of * the created result sets can be determined by calling * {@link #getHoldability}. * * @param sql * an SQL statement that may contain one or more '?' IN parameter * placeholders * @param autoGeneratedKeys * a flag indicating whether auto-generated keys should be * returned; one of Statement.RETURN_GENERATED_KEYS * or Statement.NO_GENERATED_KEYS * @return a new PreparedStatement object, containing the * pre-compiled SQL statement, that will have the capability of * returning auto-generated keys * @exception SQLException * if a database access error occurs, this method is called * on a closed connection or the given parameter is not a * Statement constant indicating whether * auto-generated keys should be returned * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method with a * constant of Statement.RETURN_GENERATED_KEYS * @since 1.4 */ public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { return this.connectionHttp.prepareStatement(sql, autoGeneratedKeys); } /** * Returns null. * * @return null * @exception SQLException * if a database access error occurs or this method is called * on a closed connection * @see SQLWarning */ public SQLWarning getWarnings() throws SQLException { return this.connectionHttp.getWarnings(); } /** * Creates a default PreparedStatement object capable of * returning the auto-generated keys designated by the given array. This * array contains the indexes of the columns in the target table that * contain the auto-generated keys that should be made available. This array * is ignored if the SQL statement is not an INSERT statement. *

* An SQL statement with or without IN parameters can be pre-compiled and * stored in a PreparedStatement object. This object can then * be used to efficiently execute this statement multiple times. *

* Note: This method is optimized for handling parametric SQL * statements that benefit from precompilation. If the driver supports * precompilation, the method prepareStatement will send the * statement to the database for precompilation. Some drivers may not * support precompilation. In this case, the statement may not be sent to * the database until the PreparedStatement object is executed. * This has no direct effect on users; however, it does affect which methods * throw certain SQLExceptions. *

* Result sets created using the returned PreparedStatement * object will by default be type TYPE_FORWARD_ONLY and have a * concurrency level of CONCUR_READ_ONLY. * * @param sql * an SQL statement that may contain one or more '?' IN parameter * placeholders * @param columnIndexes * an array of column indexes indicating the columns that should * be returned from the inserted row or rows * @return a new PreparedStatement object, containing the * pre-compiled statement, that is capable of returning the * auto-generated keys designated by the given array of column * indexes * @exception SQLException * if a database access error occurs * * @since 1.4 */ public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { return this.connectionHttp.prepareStatement(sql, columnIndexes); } /** * Does nothing. * * @exception SQLException * if a database access error occurs */ public void clearWarnings() throws SQLException { this.connectionHttp.clearWarnings(); } /** * Retrieves this Connection object's current transaction * isolation level. * * @return the current transaction isolation level, which will be one of the * following constants: * Connection.TRANSACTION_READ_UNCOMMITTED, * Connection.TRANSACTION_READ_COMMITTED, * Connection.TRANSACTION_REPEATABLE_READ, * Connection.TRANSACTION_SERIALIZABLE, or * Connection.TRANSACTION_NONE. * @exception SQLException * if a database access error occurs or this method is called * on a closed connection * @see #setTransactionIsolation */ public int getTransactionIsolation() throws SQLException { return this.connectionHttp.getTransactionIsolation(); } /** * Changes the default holdability of ResultSet objects created * using this Connection object to the given holdability. The * default holdability of ResultSet objects can be be * determined by invoking {@link DatabaseMetaData#getResultSetHoldability}. * * @param holdability * a ResultSet holdability constant; one of * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @throws SQLException * if a database access occurs, this method is called on a * closed connection, or the given parameter is not a * ResultSet constant indicating holdability * @exception SQLFeatureNotSupportedException * if the given holdability is not supported * @see #getHoldability * @see DatabaseMetaData#getResultSetHoldability * @see ResultSet * @since 1.4 */ public void setHoldability(int holdability) throws SQLException { this.connectionHttp.setHoldability(holdability); } /** * Creates a default PreparedStatement object capable of * returning the auto-generated keys designated by the given array. This * array contains the names of the columns in the target table that contain * the auto-generated keys that should be returned. This array is ignored if * the SQL statement is not an INSERT statement. *

* An SQL statement with or without IN parameters can be pre-compiled and * stored in a PreparedStatement object. This object can then * be used to efficiently execute this statement multiple times. *

* Note: This method is optimized for handling parametric SQL * statements that benefit from precompilation. If the driver supports * precompilation, the method prepareStatement will send the * statement to the database for precompilation. Some drivers may not * support precompilation. In this case, the statement may not be sent to * the database until the PreparedStatement object is executed. * This has no direct effect on users; however, it does affect which methods * throw certain SQLExceptions. *

* Result sets created using the returned PreparedStatement * object will by default be type TYPE_FORWARD_ONLY and have a * concurrency level of CONCUR_READ_ONLY. * * @param sql * an SQL statement that may contain one or more '?' IN parameter * placeholders * @param columnNames * an array of column names indicating the columns that should be * returned from the inserted row or rows * @return a new PreparedStatement object, containing the * pre-compiled statement, that is capable of returning the * auto-generated keys designated by the given array of column names * @exception SQLException * if a database access error occurs * * @since 1.4 */ public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { return this.connectionHttp.prepareStatement(sql, columnNames); } /** * Retrieves the current holdability of ResultSet objects * created using this Connection object. * * @return the holdability, one of * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @throws SQLException * if a database access error occurs or this method is called on * a closed connection * @see #setHoldability * @see DatabaseMetaData#getResultSetHoldability * @see ResultSet * @since 1.4 */ public int getHoldability() throws SQLException { return this.connectionHttp.getHoldability(); } /** * Constructs an object that implements the Blob interface. The * object returned initially contains no data. The * setBinaryStream and setBytes methods of the * Blob interface may be used to add data to the * Blob. * * @return An object that implements the Blob interface * @throws SQLException * if an object that implements the Blob interface * can not be constructed, this method is called on a closed * connection or a database access error occurs. * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * * @since 1.6 */ public Blob createBlob() throws SQLException { return this.connectionHttp.createBlob(); } /** * Constructs an object that implements the Clob interface. The * object returned initially contains no data. The * setAsciiStream, setCharacterStream and * setString methods of the Clob interface may be * used to add data to the Clob. * * @return An object that implements the Clob interface * @throws SQLException * if an object that implements the Clob interface * can not be constructed, this method is called on a closed * connection or a database access error occurs. * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * * @since 1.6 */ public Clob createClob() throws SQLException { return this.connectionHttp.createClob(); } /** * Method not implemented.
*
* Constructs an object that implements the NClob interface.The * object returned initially contains no data. The * setAsciiStream, setCharacterStream and * setString methods of the NClob interface may be * used to add data to the NClob. * * @return An object that implements the NClob interface * @throws SQLException * if an object that implements the NClob interface * can not be constructed, this method is called on a closed * connection or a database access error occurs. * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * * @since 1.6 */ public NClob createNClob() throws SQLException { return this.connectionHttp.createNClob(); } /** * Method not implemented.
*
* Constructs an object that implements the SQLXML interface. * The object returned initially contains no data. The * createXmlStreamWriter object and setString * method of the SQLXML interface may be used to add data to * the SQLXML object. * * @return An object that implements the SQLXML interface * @throws SQLException * if an object that implements the SQLXML * interface can not be constructed, this method is called on a * closed connection or a database access error occurs. * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * @since 1.6 */ public SQLXML createSQLXML() throws SQLException { return this.connectionHttp.createSQLXML(); } /** * Method not implemented.
*
* Factory method for creating Struct objects. * * @param typeName * the SQL type name of the SQL structured type that this * Struct object maps to. The typeName is the name * of a user-defined type that has been defined for this * database. It is the value returned by * Struct.getSQLTypeName. * * @param attributes * the attributes that populate the returned object * @return a Struct object that maps to the given SQL type and is populated * with the given attributes * @throws SQLException * if a database error occurs, the typeName is null or this * method is called on a closed connection * @throws SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * @since 1.6 */ public Struct createStruct(String typeName, Object[] attributes) throws SQLException { return this.connectionHttp.createStruct(typeName, attributes); } /** * Returns a list containing the name and current value of each client info * property supported by the driver. The value of a client info property may * be null if the property has not been set and does not have a default * value. *

* * @return A Properties object that contains the name and * current value of each of the client info properties supported by * the driver. *

* @throws SQLException * if the database server returns an error when fetching the * client info values from the database or this method is called * on a closed connection *

* @since 1.6 */ public Properties getClientInfo() throws SQLException { return this.connectionHttp.getClientInfo(); } /** * Returns the value of the client info property specified by name. This * method may return null if the specified client info property has not been * set and does not have a default value. This method will also return null * if the specified client info property name is not supported by the * driver. *

* Applications may use the * DatabaseMetaData.getClientInfoProperties method to determine * the client info properties supported by the driver. *

* * @param name * The name of the client info property to retrieve *

* @return The value of the client info property specified *

* @throws SQLException * if the database server returns an error when fetching the * client info value from the database or this method is called * on a closed connection *

* @since 1.6 *

* @see java.sql.DatabaseMetaData#getClientInfoProperties */ public String getClientInfo(String name) throws SQLException { return this.connectionHttp.getClientInfo(name); } /** * Returns true if the connection has not been closed and is still valid. * The driver shall submit a query on the connection or use some other * mechanism that positively verifies the connection is still valid when * this method is called. *

* The query submitted by the driver to validate the connection shall be * executed in the context of the current transaction. * * @param timeout * - The time in seconds to wait for the database operation used * to validate the connection to complete. If the timeout period * expires before the operation completes, this method returns * false. A value of 0 indicates a timeout is not applied to the * database operation. *

* @return true if the connection is valid, false otherwise * @exception SQLException * if the value supplied for timeout is less * then 0 * @since 1.6 *

* @see java.sql.DatabaseMetaData#getClientInfoProperties */ public boolean isValid(int timeout) throws SQLException { return this.connectionHttp.isValid(timeout); } /** * Method not implemented.
*
* Returns true if this either implements the interface argument or is * directly or indirectly a wrapper for an object that does. Returns false * otherwise. If this implements the interface then return true, else if * this is a wrapper then return the result of recursively calling * isWrapperFor on the wrapped object. If this does not * implement the interface and is not a wrapper, return false. This method * should be implemented as a low-cost operation compared to * unwrap so that callers can use this method to avoid * expensive unwrap calls that may fail. If this method returns * true then calling unwrap with the same argument should * succeed. * * @param iface * a Class defining an interface. * @return true if this implements the interface or directly or indirectly * wraps an object that does. * @throws java.sql.SQLException * if an error occurs while determining whether this is a * wrapper for an object with the given interface. * @since 1.6 */ public boolean isWrapperFor(Class iface) throws SQLException { return this.connectionHttp.isWrapperFor(iface); } /** * Sets the value of the connection's client info properties. The * Properties object contains the names and values of the * client info properties to be set. The set of client info properties * contained in the properties list replaces the current set of client info * properties on the connection. If a property that is currently set on the * connection is not present in the properties list, that property is * cleared. Specifying an empty properties list will clear all of the * properties on the connection. See * setClientInfo (String, String) for more information. *

* If an error occurs in setting any of the client info properties, a * SQLClientInfoException is thrown. The * SQLClientInfoException contains information indicating which * client info properties were not set. The state of the client information * is unknown because some databases do not allow multiple client info * properties to be set atomically. For those databases, one or more * properties may have been set before the error occurred. *

* * @param properties * the list of client info properties to set *

* @see java.sql.Connection#setClientInfo(String, String) * setClientInfo(String, String) * @since 1.6 *

* @throws SQLClientInfoException * if the database server returns an error while setting the * clientInfo values on the database server or this method is * called on a closed connection *

*/ public void setClientInfo(Properties properties) throws SQLClientInfoException { this.connectionHttp.setClientInfo(properties); } /** * Sets the value of the client info property specified by name to the value * specified by value. *

* Applications may use the * DatabaseMetaData.getClientInfoProperties method to determine * the client info properties supported by the driver and the maximum length * that may be specified for each property. *

* The driver stores the value specified in a suitable location in the * database. For example in a special register, session parameter, or system * table column. For efficiency the driver may defer setting the value in * the database until the next time a statement is executed or prepared. * Other than storing the client information in the appropriate place in the * database, these methods shall not alter the behavior of the connection in * anyway. The values supplied to these methods are used for accounting, * diagnostics and debugging purposes only. *

* The driver shall generate a warning if the client info name specified is * not recognized by the driver. *

* If the value specified to this method is greater than the maximum length * for the property the driver may either truncate the value and generate a * warning or generate a SQLClientInfoException. If the driver * generates a SQLClientInfoException, the value specified was * not set on the connection. *

* The following are standard client info properties. Drivers are not * required to support these properties however if the driver supports a * client info property that can be described by one of the standard * properties, the standard property name should be used. *

*

    *
  • ApplicationName - The name of the application currently utilizing the * connection
  • *
  • ClientUser - The name of the user that the application using the * connection is performing work for. This may not be the same as the user * name that was used in establishing the connection.
  • *
  • ClientHostname - The hostname of the computer the application using * the connection is running on.
  • *
*

* * @param name * The name of the client info property to set * @param value * The value to set the client info property to. If the value is * null, the current value of the specified property is cleared. *

* @throws SQLClientInfoException * if the database server returns an error while setting the * client info value on the database server or this method is * called on a closed connection *

* @since 1.6 */ public void setClientInfo(String name, String value) throws SQLClientInfoException { this.connectionHttp.setClientInfo(name, value); } /** * Method not implemented.
*
* Returns an object that implements the given interface to allow access to * non-standard methods, or standard methods not exposed by the proxy. * * If the receiver implements the interface then the result is the receiver * or a proxy for the receiver. If the receiver is a wrapper and the wrapped * object implements the interface then the result is the wrapped object or * a proxy for the wrapped object. Otherwise return the the result of * calling unwrap recursively on the wrapped object or a proxy * for that result. If the receiver is not a wrapper and does not implement * the interface, then an SQLException is thrown. * * @param iface * A Class defining an interface that the result must implement. * @return an object that implements the interface. May be a proxy for the * actual implementing object. * @throws java.sql.SQLException * If no object found that implements the interface * @since 1.6 */ public T unwrap(Class iface) throws SQLException { return this.connectionHttp.unwrap(iface); } /** * Factory method for creating Array objects. *

* Note: When createArrayOf is used to create an array * object that maps to a primitive data type, then it is * implementation-defined whether the Array object is an array * of that primitive data type or an array of Object. *

* Note: The JDBC driver is responsible for mapping the elements * Object array to the default JDBC SQL type defined in * java.sql.Types for the given class of Object. The default * mapping is specified in Appendix B of the JDBC specification. If the * resulting JDBC type is not the appropriate type for the given typeName * then it is implementation defined whether an SQLException is * thrown or the driver supports the resulting conversion. * * @param typeName * the SQL name of the type the elements of the array map to. The * typeName is a database-specific name which may be the name of * a built-in type, a user-defined type or a standard SQL type * supported by this database. This is the value returned by * Array.getBaseTypeName * @param elements * the elements that populate the returned object * @return an Array object whose elements map to the specified SQL type * @throws SQLException * if a database error occurs, the JDBC type is not appropriate * for the typeName and the conversion is not supported, the * typeName is null or this method is called on a closed * connection * @throws SQLFeatureNotSupportedException * if the JDBC driver does not support this data type * @since 1.6 */ public Array createArrayOf(String typeName, Object[] elements) throws SQLException { return this.connectionHttp.createArrayOf(typeName, elements); } // // Utility dedicated methods for raw ConnectionHttp class that are not // Connection // /** * Returns the current Version. * * @return the current Version */ public String getVersion() { return this.connectionHttp.getVersion(); } /** * Allows to get a copy of the current RemoteConnection: use it * to do some simultaneous operations in a different thread (in order to * avoid conflicts). */ @Override public Connection clone() { Connection connection = new RemoteConnection(this.getUrl(), this.getUsername(), this.getProxy(), this.getPasswordAuthentication(), this.getSessionParameters(), this.getRemoteSession(), this.connectionHttp.isStatelessMode(), this.connectionHttp.isJoinResultSetMetaData()); return connection; } /** * Returns the http status code of the last executed JDBC command that * called the remote Server SQL Manager. * * @return the http status code of the last executed JDBC command that * called the remote Server SQL Manager. 0 means the status could * not be returned. */ public int getHttpStatusCode() { return this.connectionHttp.getHttpStatusCode(); } /** * Returns the URL of the path to the ServerSqlManager Servlet. * * @return the URL of the path to the ServerSqlManager Servlet */ public String getUrl() { return this.connectionHttp.getUrl(); } /** * Returns the username in use. * * @return the username in use */ public String getUsername() { return this.connectionHttp.getUsername(); } /** * Gets the current RemoteSession instance (used for file * transfers of Clobs and Blobs). *

* * @return the fileSession instance (to be used for file transfers, per * example) */ public RemoteSession getRemoteSession() { return this.connectionHttp.getRemoteSession(); } /** * Returns true if the statement parameters are to be encrypted. * * @return true if the statement parameters are to be encrypted. (Default to * false). */ public boolean isEncryptStatementParameters() { return this.connectionHttp.isEncryptStatementParameters(); } /** * Set if the statement parameters are to be encrypted * * @param encryptStatementParameters * true if the statement parameters are to be encrypted, else * false */ public void setEncryptStatementParameters(boolean encryptStatementParameters) { this.connectionHttp .setEncryptStatementParameters(encryptStatementParameters); } /** * Returns the SessionParameters instance in use for the * session. * * @return the SessionParameters instance in use for the * session */ public SessionParameters getSessionParameters() { return this.connectionHttp.getSessionParameters(); } /** * Returns the {@code Proxy} instance in use for this File Session. * * @return the {@code Proxy} instance in use for this File Session */ public Proxy getProxy() { return this.connectionHttp.getProxy(); } /** * Returns the proxy credentials * * @return the proxy credentials */ public PasswordAuthentication getPasswordAuthentication() { return this.connectionHttp.getPasswordAuthentication(); } /** * Returns the maximum Number Of Statements that may be transported in * memory. If maximum is reached, transport is done using a file. * * @return the maximum Number Of Statements that may be transported in * memory. */ public int getMaxStatementsForMemoryTransport() { return this.connectionHttp.getMaxStatementsForMemoryTransport(); } /** * Sets the maximum Number Of Statements that may be transported in memory * from client to server. if maximum is reached, transport is done using a * file. * * @param maxStatementsForMemoryTransport * the maximum Number Of Statements that may be transported in * memory. * */ public void setMaxStatementsForMemoryTransport( int maxStatementsForMemoryTransport) { this.connectionHttp .setMaxStatementsForMemoryTransport(maxStatementsForMemoryTransport); } /** * Says if session is in stateless mode when connecting to the server. * * @return true if session is in stateless mode when connecting to the * server */ public boolean isStatelessMode() { return connectionHttp.isStatelessMode(); } // ///////////////////////////////////////////////////////// // JAVA 7 METHOD EMULATION // // ///////////////////////////////////////////////////////// /** * Method not implemented.
*
* Terminates an open connection. Calling abort results in: *

    *
  • The connection marked as closed *
  • Closes any physical connection to the database *
  • Releases resources used by the connection *
  • Insures that any thread that is currently accessing the connection * will either progress to completion or throw an SQLException. *
*

* Calling abort marks the connection closed and releases any * resources. Calling abort on a closed connection is a no-op. *

* It is possible that the aborting and releasing of the resources that are * held by the connection can take an extended period of time. When the * abort method returns, the connection will have been marked * as closed and the Executor that was passed as a parameter to * abort may still be executing tasks to release resources. *

* This method checks to see that there is an SQLPermission * object before allowing the method to proceed. If a * SecurityManager exists and its checkPermission * method denies calling abort, this method throws a * java.lang.SecurityException. * * @param executor * The Executor implementation which will be used by * abort. * @throws java.sql.SQLException * if a database access error occurs or the {@code executor} is * {@code null}, * @throws java.lang.SecurityException * if a security manager exists and its * checkPermission method denies calling * abort * @see SecurityManager#checkPermission * @see Executor * @since 1.7 */ public void abort(Executor executor) throws SQLException { this.connectionHttp.abort(executor); } /** * Method not implemented.
*
* Retrieves the number of milliseconds the driver will wait for a database * request to complete. If the limit is exceeded, a * SQLException is thrown. * * @return the current timeout limit in milliseconds; zero means there is no * limit * @throws SQLException * if a database access error occurs or this method is called on * a closed Connection * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method * @see #setNetworkTimeout * @since 1.7 */ public int getNetworkTimeout() throws SQLException { return this.connectionHttp.getNetworkTimeout(); } /** * Method not implemented.
*
* Retrieves this Connection object's current schema name. * * @return the current schema name or null if there is none * @exception SQLException * if a database access error occurs or this method is called * on a closed connection * @see #setSchema * @since 1.7 */ public String getSchema() throws SQLException { return this.connectionHttp.getSchema(); } /** * Method not implemented.
*
* Sets the maximum period a Connection or objects created from * the Connection will wait for the database to reply to any * one request. If any request remains unanswered, the waiting method will * return with a SQLException, and the Connection * or objects created from the Connection will be marked as * closed. Any subsequent use of the objects, with the exception of the * close, isClosed or * Connection.isValid methods, will result in a * SQLException. *

* Note: This method is intended to address a rare but serious * condition where network partitions can cause threads issuing JDBC calls * to hang uninterruptedly in socket reads, until the OS TCP-TIMEOUT * (typically 10 minutes). This method is related to the {@link #abort * abort() } method which provides an administrator thread a means to free * any such threads in cases where the JDBC connection is accessible to the * administrator thread. The setNetworkTimeout method will * cover cases where there is no administrator thread, or it has no access * to the connection. This method is severe in it's effects, and should be * given a high enough value so it is never triggered before any more normal * timeouts, such as transaction timeouts. *

* JDBC driver implementations may also choose to support the * {@code setNetworkTimeout} method to impose a limit on database response * time, in environments where no network is present. *

* Drivers may internally implement some or all of their API calls with * multiple internal driver-database transmissions, and it is left to the * driver implementation to determine whether the limit will be applied * always to the response to the API call, or to any single request made * during the API call. *

* * This method can be invoked more than once, such as to set a limit for an * area of JDBC code, and to reset to the default on exit from this area. * Invocation of this method has no impact on already outstanding requests. *

* The {@code Statement.setQueryTimeout()} timeout value is independent of * the timeout value specified in {@code setNetworkTimeout}. If the query * timeout expires before the network timeout then the statement execution * will be canceled. If the network is still active the result will be that * both the statement and connection are still usable. However if the * network timeout expires before the query timeout or if the statement * timeout fails due to network problems, the connection will be marked as * closed, any resources held by the connection will be released and both * the connection and statement will be unusable. *

* When the driver determines that the {@code setNetworkTimeout} timeout * value has expired, the JDBC driver marks the connection closed and * releases any resources held by the connection. *

* * This method checks to see that there is an SQLPermission * object before allowing the method to proceed. If a * SecurityManager exists and its checkPermission * method denies calling setNetworkTimeout, this method throws * a java.lang.SecurityException. * * @param executor * The Executor implementation which will be used by * setNetworkTimeout. * @param milliseconds * The time in milliseconds to wait for the database operation to * complete. If the JDBC driver does not support milliseconds, * the JDBC driver will round the value up to the nearest second. * If the timeout period expires before the operation completes, * a SQLException will be thrown. A value of 0 indicates that * there is not timeout for database operations. * @throws java.sql.SQLException * if a database access error occurs, this method is called on a * closed connection, the {@code executor} is {@code null}, or * the value specified for seconds is less than 0. * @throws java.lang.SecurityException * if a security manager exists and its * checkPermission method denies calling * setNetworkTimeout. * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method * @see SecurityManager#checkPermission * @see Statement#setQueryTimeout * @see #getNetworkTimeout * @see #abort * @see Executor * @since 1.7 */ public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException { this.connectionHttp.setNetworkTimeout(executor, milliseconds); } /** * Method not implemented.
*
* Sets the given schema name to access. *

* If the driver does not support schemas, it will silently ignore this * request. *

* Calling {@code setSchema} has no effect on previously created or prepared * {@code Statement} objects. It is implementation defined whether a DBMS * prepare operation takes place immediately when the {@code Connection} * method {@code prepareStatement} or {@code prepareCall} is invoked. For * maximum portability, {@code setSchema} should be called before a * {@code Statement} is created or prepared. * * @param schema * the name of a schema in which to work * @exception SQLException * if a database access error occurs or this method is called * on a closed connection * @see #getSchema * @since 1.7 */ public void setSchema(String schema) throws SQLException { this.connectionHttp.setSchema(schema); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy