/*
 * Copyright (c) 2000, 2016, 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 javax.sql;

import java.sql.Connection;
import java.sql.ConnectionBuilder;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Wrapper;

A factory for connections to the physical data source that this DataSource object represents. An alternative to the DriverManager facility, a DataSource object is the preferred means of getting a connection. An object that implements the DataSource interface will typically be registered with a naming service based on the Java™ Naming and Directory (JNDI) API.

The DataSource interface is implemented by a driver vendor. There are three types of implementations:

  1. Basic implementation -- produces a standard Connection object
  2. Connection pooling implementation -- produces a Connection object that will automatically participate in connection pooling. This implementation works with a middle-tier connection pooling manager.
  3. Distributed transaction implementation -- produces a Connection object that may be used for distributed transactions and almost always participates in connection pooling. This implementation works with a middle-tier transaction manager and almost always with a connection pooling manager.

A DataSource object has properties that can be modified when necessary. For example, if the data source is moved to a different server, the property for the server can be changed. The benefit is that because the data source's properties can be changed, any code accessing that data source does not need to be changed.

A driver that is accessed via a DataSource object does not register itself with the DriverManager. Rather, a DataSource object is retrieved through a lookup operation and then used to create a Connection object. With a basic implementation, the connection obtained through a DataSource object is identical to a connection obtained through the DriverManager facility.

An implementation of DataSource must include a public no-arg constructor.

Since:1.4
/** * <p>A factory for connections to the physical data source that this * {@code DataSource} object represents. An alternative to the * {@code DriverManager} facility, a {@code DataSource} object * is the preferred means of getting a connection. An object that implements * the {@code DataSource} interface will typically be * registered with a naming service based on the * Java&trade; Naming and Directory (JNDI) API. * <P> * The {@code DataSource} interface is implemented by a driver vendor. * There are three types of implementations: * <OL> * <LI>Basic implementation -- produces a standard {@code Connection} * object * <LI>Connection pooling implementation -- produces a {@code Connection} * object that will automatically participate in connection pooling. This * implementation works with a middle-tier connection pooling manager. * <LI>Distributed transaction implementation -- produces a * {@code Connection} object that may be used for distributed * transactions and almost always participates in connection pooling. * This implementation works with a middle-tier * transaction manager and almost always with a connection * pooling manager. * </OL> * <P> * A {@code DataSource} object has properties that can be modified * when necessary. For example, if the data source is moved to a different * server, the property for the server can be changed. The benefit is that * because the data source's properties can be changed, any code accessing * that data source does not need to be changed. * <P> * A driver that is accessed via a {@code DataSource} object does not * register itself with the {@code DriverManager}. Rather, a * {@code DataSource} object is retrieved through a lookup operation * and then used to create a {@code Connection} object. With a basic * implementation, the connection obtained through a {@code DataSource} * object is identical to a connection obtained through the * {@code DriverManager} facility. * <p> * An implementation of {@code DataSource} must include a public no-arg * constructor. * * @since 1.4 */
public interface DataSource extends CommonDataSource, Wrapper {

Attempts to establish a connection with the data source that this DataSource object represents.

Throws:
  • SQLException – if a database access error occurs
  • SQLTimeoutException – when the driver has determined that the timeout value specified by the setLoginTimeout method has been exceeded and has at least tried to cancel the current database connection attempt
Returns: a connection to the data source
/** * <p>Attempts to establish a connection with the data source that * this {@code DataSource} object represents. * * @return a connection to the data source * @exception SQLException if a database access error occurs * @throws java.sql.SQLTimeoutException when the driver has determined that the * timeout value specified by the {@code setLoginTimeout} method * has been exceeded and has at least tried to cancel the * current database connection attempt */
Connection getConnection() throws SQLException;

Attempts to establish a connection with the data source that this DataSource object represents.

Params:
  • username – the database user on whose behalf the connection is being made
  • password – the user's password
Throws:
  • SQLException – if a database access error occurs
  • SQLTimeoutException – when the driver has determined that the timeout value specified by the setLoginTimeout method has been exceeded and has at least tried to cancel the current database connection attempt
Returns: a connection to the data source
Since:1.4
/** * <p>Attempts to establish a connection with the data source that * this {@code DataSource} object represents. * * @param username the database user on whose behalf the connection is * being made * @param password the user's password * @return a connection to the data source * @exception SQLException if a database access error occurs * @throws java.sql.SQLTimeoutException when the driver has determined that the * timeout value specified by the {@code setLoginTimeout} method * has been exceeded and has at least tried to cancel the * current database connection attempt * @since 1.4 */
Connection getConnection(String username, String password) throws SQLException;
{@inheritDoc}
Since:1.4
/** * {@inheritDoc} * @since 1.4 */
@Override java.io.PrintWriter getLogWriter() throws SQLException;
{@inheritDoc}
Since:1.4
/** * {@inheritDoc} * @since 1.4 */
@Override void setLogWriter(java.io.PrintWriter out) throws SQLException;
{@inheritDoc}
Since:1.4
/** * {@inheritDoc} * @since 1.4 */
@Override void setLoginTimeout(int seconds) throws SQLException;
{@inheritDoc}
Since:1.4
/** * {@inheritDoc} * @since 1.4 */
@Override int getLoginTimeout() throws SQLException; // JDBC 4.3
Create a new ConnectionBuilder instance
Throws:
See Also:
Implementation Requirements: The default implementation will throw a SQLFeatureNotSupportedException
Returns:The ConnectionBuilder instance that was created
Since:9
/** * Create a new {@code ConnectionBuilder} instance * @implSpec * The default implementation will throw a {@code SQLFeatureNotSupportedException} * @return The ConnectionBuilder instance that was created * @throws SQLException if an error occurs creating the builder * @throws SQLFeatureNotSupportedException if the driver does not support sharding * @since 9 * @see ConnectionBuilder */
default ConnectionBuilder createConnectionBuilder() throws SQLException { throw new SQLFeatureNotSupportedException("createConnectionBuilder not implemented"); }; }