<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<!--
Copyright (c) 1998, 2006, 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
CA 95054 USA or visit www.sun.com if you need additional information or
have any questions.
-->

</head>



<body bgcolor="white">

Provides the API for accessing and processing data stored in a 
data source (usually a relational database) using the 
Java<sup><font size=-2>TM</font></sup> programming language. 
This API includes a framework whereby different
drivers can be installed dynamically to access different data sources.
Although the JDBC<sup><font size=-2>TM</font></sup> API is mainly geared 
to passing SQL statements to a database, it provides for reading and
writing data from any data source with a tabular format.
The reader/writer facility, available through the 
<code>javax.sql.RowSet</code> group of interfaces, can be customized to
use and update data from a spread sheet, flat file, or any other tabular 
data source.
<P>
<h2>What the JDBC<sup><font size=-2>TM</font></sup> 4.0 API Includes</h2>
The JDBC<sup><font size=-2>TM</font></sup> 4.0 API includes both
the <code>java.sql</code> package, referred to as the JDBC core API,
and the <code>javax.sql</code> package, referred to as the JDBC Optional
Package API. This complete JDBC API
is included in the Java<sup><font size=-2>TM</font></sup>  
Standard Edition (Java SE<sup><font size=-2>TM</font></sup>), version 6.  
The <code>javax.sql</code> package extends the functionality of the JDBC API 
from a client-side API to a server-side API, and it is an essential part
of the Java<sup><font size=-2>TM</font></sup>  Enterprise Edition
(Java EE<sup><font size=-2>TM</font></sup>) technology. 
<P>
<h2>Versions</h2>
The JDBC 4.0 API incorporates all of the previous JDBC API versions:
<UL>
 <LI> The JDBC 3.0 API
 <LI> The JDBC 2.1 core API
 <LI> The JDBC 2.0 Optional Package API<br>
      (Note that the JDBC 2.1 core API and the JDBC 2.0 Optional Package
      API together are referred to as the JDBC 2.0 API.)
 <LI> The JDBC 1.2 API
 <LI> The JDBC 1.0 API
</UL>
<P>
Classes, interfaces, methods, fields, constructors, and exceptions 
have the following "since" tags that indicate when they were introduced 
into the Java platform. When these "since" tags are used in
Javadoc<sup><font size=-2>TM</font></sup> comments for the JDBC API,
they indicate the following:
<UL>
 <LI>Since 1.6 -- new in the JDBC 4.0 API and part of the Java SE platform, 
     version 6
 <LI>Since 1.4 -- new in the JDBC 3.0 API and part of the J2SE platform, 
     version 1.4
 <LI>Since 1.2 -- new in the JDBC 2.0 API and part of the J2SE platform, 
     version 1.2
 <LI>Since 1.1 or no "since" tag -- in the original JDBC 1.0 API and part of
      the JDK<sup><font size=-2>TM</font></sup>, version 1.1
</UL>
<P>
<b>NOTE:</b> Many of the new features are optional; consequently, there is 
some variation in drivers and the features they support. Always 
check your driver's documentation to see whether it supports a feature before
you try to use it.
<P>
<b>NOTE:</b> The class <code>SQLPermission</code> was added in the
Java<sup><font size=-2>TM</font></sup> 2 SDK, Standard Edition, 
version 1.3 release. This class is used to prevent unauthorized
access to the logging stream associated with the <code>DriverManager</code>,
which may contain information such as table names, column data, and so on.
<p>

<h2>What the <code>java.sql</code> Package Contains</h2>
The <code>java.sql</code> package contains API for the following:
<UL>
  <LI>Making a connection with a database via the <code>DriverManager</code> facility
  <UL>
	 <LI><code>DriverManager</code> class -- makes a connection with a driver
	 <LI><code>SQLPermission</code> class -- provides permission when code
                  running within a Security Manager, such as an applet,
                  attempts to set up a logging stream through the
                  <code>DriverManager</code>
	 <LI><code>Driver</code> interface -- provides the API for registering
             and connecting drivers based on JDBC technology ("JDBC drivers"); 
             generally used only by the <code>DriverManager</code> class
	 <LI><code>DriverPropertyInfo</code> class -- provides properties for a
             JDBC driver; not used by the general user
  </UL>
  <LI>Sending SQL statements to a database
  <UL>
	 <LI><code>Statement</code> --  used to send basic SQL statements
	 <LI><code>PreparedStatement</code> --  used to send prepared statements or 
              basic SQL statements (derived from <code>Statement</code>)
	 <LI><code>CallableStatement</code> --  used to call database stored 
              procedures (derived from <code>PreparedStatement</code>)
	 <LI><code>Connection</code> interface --  provides methods for creating
             statements and managing connections and their properties
	 <LI><code>Savepoint</code> --  provides savepoints in a transaction

  </UL>
  <LI>Retrieving and updating the results of a query
  <UL>
	 <LI><code>ResultSet</code> interface
  </UL>
  <LI>Standard mappings for SQL types to classes and interfaces in the 
      Java programming language
  <UL>
	 <LI><code>Array</code> interface -- mapping for SQL <code>ARRAY</code> 
	 <LI><code>Blob</code> interface -- mapping for SQL <code>BLOB</code> 
	 <LI><code>Clob</code> interface -- mapping for SQL <code>CLOB</code>
	 <LI><code>Date</code> class -- mapping for SQL <code>DATE</code> 
	  <LI><code>NClob</code> interface -- mapping for SQL <code>NCLOB</code>
	 <LI><code>Ref</code> interface -- mapping for SQL <code>REF</code> 
	  <LI><code>RowId</code> interface -- mapping for SQL <code>ROWID</code>
	 <LI><code>Struct</code> interface -- mapping for SQL <code>STRUCT</code> 
	  <LI><code>SQLXML</code> interface -- mapping for SQL <code>XML</code>
	 <LI><code>Time</code> class -- mapping for SQL <code>TIME</code> 
	 <LI><code>Timestamp</code> class -- mapping for SQL <code>TIMESTAMP</code> 
	 <LI><code>Types</code> class -- provides constants for SQL types
  </UL>
  <LI>Custom mapping an SQL user-defined type (UDT) to a class in the
	  Java programming language
  <UL>
	 <LI><code>SQLData</code> interface -- specifies the mapping of
              a UDT to an instance of this class
	 <LI><code>SQLInput</code> interface -- provides methods for reading
              UDT attributes from a stream
	 <LI><code>SQLOutput</code> interface -- provides methods for writing
              UDT attributes back to a stream
  </UL>
  <LI>Metadata
  <UL>
	 <LI><code>DatabaseMetaData</code> interface -- provides information
              about the database
	 <LI><code>ResultSetMetaData</code> interface -- provides information
              about the columns of a <code>ResultSet</code> object
	 <LI><code>ParameterMetaData</code> interface -- provides information
              about the parameters to <code>PreparedStatement</code> commands
  </UL>
  <LI>Exceptions
	<UL>
	  <LI><code>SQLException</code> -- thrown by most methods when there
		 is a problem accessing data and by some methods for other reasons
	  <LI><code>SQLWarning</code> -- thrown to indicate a warning
	  <LI><code>DataTruncation</code> -- thrown to indicate that data may have
     	  been truncated
	  <LI><code>BatchUpdateException</code> -- thrown to indicate that not all
		 commands in a batch update executed successfully
	</UL>
</UL>
<P>
<h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 4.0 API</h3>
<UL>
  <LI>auto java.sql.Driver discovery -- no longer need to load a 
<code>java.sql.Driver</code> class via <code>Class.forName</code>
 <LI>National Character Set support added
 <li>Support added for the SQL:2003 XML data type
 <lI>SQLException enhancements -- Added support for cause chaining; New SQLExceptions
 added for common SQLState class value codes
 <li>Enhanced Blob/Clob functionality -- Support provided to create and free a Blob/Clob instance
 as well as additional methods added to improve accessiblity
 <li>Support added for accessing a SQL ROWID
 <li>Support added to allow a JDBC application to access an instance of a JDBC resource
 that has been wrapped by a vendor, usually in an application server or connection 
 pooling environment.
 <li>Availability to be notfied when a <code>PreparedStatement</code> that is associated
 with a <code>PooledConnection</code> has been closed or the driver determines is invalid
 
 
</UL>
<P>
<P>
<h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 3.0 API</h3>
<UL>
  <LI>Pooled statements -- reuse of statements associated with a pooled 
       connection
  <LI>Savepoints -- allow a transaction to be rolled back to a designated
      savepoint
  <LI>Properties defined for <code>ConnectionPoolDataSource</code> -- specify
      how connections are to be pooled
  <LI>Metadata for parameters of a <code>PreparedStatement</code> object
  <LI>Ability to retrieve values from automatically generated columns
  <LI>Ability to have multiple <code>ResultSet</code> objects 
       returned from <code>CallableStatement</code> objects open at the
      same time
  <LI>Ability to identify parameters to <code>CallableStatement</code>
      objects by name as well as by index
  <LI><code>ResultSet</code> holdability -- ability to specify whether cursors
      should be held open or closed at the end of a transaction
  <LI>Ability to retrieve and update the SQL structured type instance that a
      <code>Ref</code> object references
  <LI>Ability to programmatically update <code>BLOB</code>,
      <code>CLOB</code>, <code>ARRAY</code>, and <code>REF</code> values.
  <LI>Addition of the <code>java.sql.Types.DATALINK</code> data type -- 
      allows JDBC drivers access to objects stored outside a data source
  <LI>Addition of metadata for retrieving SQL type hierarchies
</UL>
<P>
<h3><code>java.sql</code> Features Introduced in the JDBC 2.1 Core API</h3>
<UL>
  <LI>Scrollable result sets--using new methods in the <code>ResultSet</code>
	  interface that allow the cursor to be moved to a particular row or to a
	  position relative to its current position
  <LI>Batch updates
  <LI>Programmatic updates--using <code>ResultSet</code> updater methods
  <LI>New data types--interfaces mapping the SQL3 data types
  <LI>Custom mapping of user-defined types (UDTs)
  <LI>Miscellaneous features, including performance hints, the use of character
	  streams, full precision for <code>java.math.BigDecimal</code> values,
	  additional security, and
	  support for time zones in date, time, and timestamp values. 
</UL>
<P>
<h3><code>javax.sql</code> Features Introduced in the JDBC 2.0 Optional
Package API</h3>
<UL>
  <LI>The <code>DataSource</code> interface as a means of making a connection.  The
      Java Naming and Directory Interface<sup><font size=-2>TM</font></sup>
      (JNDI) is used for registering a <code>DataSource</code> object with a 
      naming service and also for  retrieving it.
  <LI>Pooled connections -- allowing connections to be used and reused
  <LI>Distributed transactions -- allowing a transaction to span diverse
      DBMS servers
  <LI><code>RowSet</code> technology -- providing a convenient means of
       handling and passing data
</UL>
<P>
<P>
<h3>Custom Mapping of UDTs</h3>
A user-defined type (UDT) defined in SQL can be mapped to a class in the Java
programming language. An SQL structured type or an SQL <code>DISTINCT</code>
type are the UDTs that may be custom mapped.  The following three
steps set up a custom mapping:
<ol>
  <li>Defining the SQL structured type or <code>DISTINCT</code> type in SQL
  <li>Defining the class in the Java programming language to which the
	  SQL UDT will be mapped.  This class must implement the
	  <code>SQLData</code> interface.
  <li>Making an entry in a <code>Connection</code> object's type map
      that contains two things:
   <ul>
       <li>the fully-qualified SQL name of the UDT
       <li>the <code>Class</code> object for the class that implements the 
           <code>SQLData</code> interface
   </ul>
</ol>
<p>
When these are in place for a UDT, calling the methods
<code>ResultSet.getObject</code> or <code>CallableStatement.getObject</code> 
on that UDT will automatically retrieve the custom mapping for it. Also, the
<code>PreparedStatement.setObject</code> method will automatically map the
object back to its SQL type to store it in the data source.

<h2>Package Specification</h2>

<ul>
  <li><a href="http://java.sun.com/products/jdbc/download.html">Specification 
      of the JDBC 4.0 API</a>
</ul>

<h2>Related Documentation</h2>

<ul>
  <li><a href="../../../guide/jdbc/getstart/GettingStartedTOC.fm.html">Getting Started</a>--overviews of the major interfaces
<P>
  <li><a href="http://java.sun.com/docs/books/tutorial/jdbc">Chapters on the JDBC 
     API</a>--from the online version of <i>The Java Tutorial Continued</i>
<P>
  <li><a href="http://java.sun.com/docs/books/jdbc">
<i>JDBC<sup><font size=-2>TM</font></sup>API Tutorial and Reference, 
Third Edition</i></a>--
a complete reference and tutorial for the JDBC 3.0 API
</ul>
<P>
@since 1.1
</body>
</html>
