JDBC—The Java Database API
What Is JDBC?
JDBC Core Components
A Simple Database Query Program
Inserting, Updating, and Deleting Data
Updating Data from a Result Set
The JDBC Optional Package
Troubleshooting
What Is JDBC?
The Java Database Connectivity (JDBC) API is one of the most important APIs for enterprise-level development because you almost always need to access a database. JDBC gives you a standard API that is mostly database-independent, but still allows you to access specific features of your database if necessary.
There are actually two parts to the JDBC API. The core JDBC API (java.sql.*) comes with the standard Java Development Kit. J2EE includes the JDBC Optional Package (javax.sql.*) that includes some features more commonly used for J2EE development (especially in the area of Enterprise JavaBeans).
Most databases have very different APIs for communicating with the database. On the Windows platform and even some Unix platforms, the ODBC API (Open Database Connectivity) gives you a standard database API that works with many different databases. JDBC solves the same problem as ODBC because it also gives you a standard database API.
Like ODBC, the JDBC package itself doesn't know how to connect to any database. It is an API framework that relies on other packages to provide the implementation. You can go to http://www.oracle.com or http://www.informix.com and download JDBC drivers that work with the Oracle and Informix databases. No matter what database you use, there's a good chance that there's already a JDBC driver available for it.
There are four types of JDBC drivers, called Type 1, Type 2, Type 3, and Type 4. It's important to know the various types when you first choose a driver, and sometimes the driver choice might affect your application design—especially if you are developing Java applets.
The first distinction to draw among the four types is that Type 1 and Type 2 drivers involve native libraries—they aren't pure Java. This means it might be more difficult to find a driver for your hardware platform, and it also means you typically can't use the driver from a Java applet. Technically, you can't use the driver from an unsigned applet, but a signed applet might be able to use the driver. For more about signing applets, see Chapter 45, "Code Signing."
Type 1 JDBC Drivers
A Type 1 JDBC driver uses a native library with a common interface. That is, the native library isn't database specific. The most common example of a Type 1 driver is the JDBC-ODBC bridge that comes with the JDK. The bridge doesn't need to know about every kind of database; it only needs to know how to use the ODBC API.
Figure 3.1 illustrates a typical Type 1 driver configuration.
Figure 3.1 A Type 1 driver uses a native library to communicate with a database-independent API.
Although they use native code, Type 1 drivers still tend to be slow because the data must pass through so many layers. ODBC, for example, still needs a database-specific driver, so your data passes through the database-specific driver, the ODBC driver, and finally the JDBC driver before it reaches you.
Type 2 JDBC Drivers
A Type 2 driver accesses a database-specific driver through a native library. Because it uses a native library, a Type 2 driver is often fairly quick, although there is still some slowdown in the interface between Java and the native API. As with the Type 1 driver, the native library tends to limit your cross-platform options because you might not be able to find a driver for your hardware platform.
Figure 3.2 illustrates a typical Type 2 driver configuration.
Figure 3.2 A Type 2 driver uses a database-specific native library.
Type 3 JDBC Drivers
A Type 3 JDBC driver is pure Java and uses a database-independent protocol to communicate with a database gateway. You typically use a Type 3 driver and database gateway when you develop Java applets because the gateway helps you work around some of the applet security restrictions. Figure 3.3 illustrates a typical Type 3 driver configuration.
Figure 3.3 A Type 3 driver communicates with a database gateway.
Using a Type 3 driver can be one of the slowest ways to access data because of the presence of the database gateway. The gateway must read the data from the database and then send it to you. It doubles the amount of network traffic, and networking tends to be one of the slower parts of an application.
Type 4 JDBC Drivers
A Type 4 driver is pure Java and communicates directly with the database. In the very early days of Java, before Just-In-Time (JIT) compilers were available, Type 2 drivers were the most popular drivers because of their speed. Type 4 drivers are now the most popular because the JIT makes the driver perform at levels comparable to the native driver, and because the data doesn't pass through the JNI layer (that is, the driver doesn't need to translate data into Java objects), the Type 4 drivers typically outperform Type 2 drivers. Plus, the Type 4 drivers work on any Java platform. Of course, the Type 4 drivers are database-specific, so you need a different driver for each different database platform. A Type 4 driver for Oracle can't access an Informix database. Figure 3.4 illustrates a typical Type 4 driver configuration.
Keep in mind that your choice of driver doesn't change how you write your code. A large number of applications allow you to specify the JDBC driver at runtime. The API itself doesn't care about the type of driver.
Figure 3.4 A Type 4 driver communicates directly with the database.