As a developer who's using the JDBC,
one of the first things you need to understand is how to use JDBC drivers and
the JDBC API to connect to a data source. This chapter outlines the steps
necessary for you to begin that process. We'll be covering the details of
getting JDBC drivers to work, as well as the driver registration process we
touched on in Chapter 1. We'll also take some time to explore JavaSoft's
Before our discussion gets underway though, I need to point out a few things
about JDBC drivers. First, there are no drivers packaged with the JDBC API; you
must get them yourself from software vendors. Check out this book's Web site
for links to demo versions of drivers for your favorite database server, as well
as free JDBC drivers available on the Internet. Second, if you want to use
ODBC, don't forget that you'll need ODBC drivers, as well. If you don't have a
database server, but you want to use JDBC, don't despair: You can use the ODBC
drivers packaged with Microsoft Access. Using the
Unfortunately, applets enforce a security restriction that does not allow
access to the local disk, so ODBC drivers might not work in the applet
context (inside a Web browser). A future release of the Java Development Kit
(JDK) may change or relax this security restriction. A workaround for
Java-enabled Web browsers is being prepared, and by the time you read this, it
may very well be possible to use the JDBC-ODBC bridge. Using ODBC drivers in
Java programs also requires pre-installation of the ODBC drivers and
So you're a regular Java hacker, and you've already figured out how to install the JDBC API package. Now you want to jump right into it. This section will outline the four basic steps for running your first query and getting the results. The steps are explained in greater detail in Chapter 4. Figure 3.1 is a diagram relating the four classes that you'll call on in your JDBC Java program, and it is the skeleton around which you can build database-aware Java programs. The diagram does not list all of the methods available in the respective classes. See Chapter 12, the JDBC API reference, for the complete class and method list.
Figure 3.1 The JDBC classes to
call.
The following (Listing 3.1) is a very simple JDBC application that follows these four steps. It runs a query and gets one row from the returned result. If you don't understand everything going on here, don't worry-it's all explained in detail in Chapter 4.
Listing 3.1 Example JDBC application.
import java.net.URL;The java.sql.* package contains the JDBC base API classes, which are supposed to be
The java.sql.* package contains the JDBC base API classes, which are supposed to be in the normal java.* hierachy that is distributed as part of the Java API (which includes the java.awt, java.io, and java.lang packages). Currently, the JDBC API is not distributed with the JDK, but it is slated to be included in the next release. I have a sneaking suspicion that the java.sql.* package will also be included in the future APIs of popular Java-enabled Web browsers.
However, you don't have to wait for this updated software to be released. You can grab the JDBC API classes from the accompanying CD-ROM or from the JavaSoft Web site at https://splash.java.com/jdbc. As I was writing this chapter, the classes were stored in a file named "jdbc.100.tar.Z." By the time you read this chapter, however, the file name may be slightly different. Once you have your software, simply follow these easy instructions to install the API classes in the proper place on your computer's hard disk. The method shown here allows you to compile and run Java applications and applets (using the Appletviewer) that use the JDBC:
1. Download the JDBC API package from the JavaSoft Web site or make a copy of the file from the CD-ROM.
2. On your hard drive, locate the directory that stores the Java API packages. (On my PC, the directory is C:\JAVA\SRC, and on my Sun box, the directory is \usr\local\java\src.) You do not need to install the JDBC API package in the same directory as the rest of the Java API, but I strongly recommend that you do because, as I mentioned earlier, the JDBC API will soon be a standard part of the Java API distribution and will be packaged in the Java API hierarchy.
3. Unpack the
JDBC API classes using one of the following methods (for Unix-based machines or
PCs), substituting the location where you downloaded the JDBC class file and
the location where you want to install the JDBC classes.
Unix Procedure:
. To upack the file, enter prompt> uncompress \home\prpatel\jdbc.100.tar.Z.
. To create a jdbc directory with the classes and their source in separate directories, enter prompt> tar xvf \home\prpatel\jdbc.100.tar.Z.
. To install the JDBC classes, enter prompt> cd \usr\local\java\src, then enter prompt> mv \home\prpatel\jdbc\classes\java, and finally enter prompt> mv \home\prpatel\jdbc\src\java.
Windows 95 Procedure:
. Using a Windows 95 ZIP utility such as WinZip, uncompress and untar the file. Be sure the file name ends with .tar when you uncompress the file so that utilities will recognize the file. Untar the file to a tempory folder. Then do the following:
. Copy the java folder from the JDBC\CLASSES directory (from the temp directory where you untarred the downloaded file) to the C:\JAVA\SRC directory.
. Copy the java folder from the JDBC\SRC directory to C:\JAVA\SRC.
4. Set the CLASSPATH to point to c:/usr/local/java/src (for Unix-based machines) or C:\JAVA\SRC (for PCs). Again, remember to substitute your location if this is not where you installed the downloaded file.
Tip: Save
the API documentation.
The only item left from the JDBC package you downloaded is the API documentation,
which is in the jdbc\html directory that was created when you untarred the
downloaded file. You may want to save that somewhere for reference. You can
view the file using a Web browser.
I must stress that you should make sure that you have the CLASSPATH set properly. The package will be called in the following way in your Java program:
import java.sql.*You need to point the CLASSPATH at the parent of the java directory you copied in Step 2, which is why we set the CLASSPATH in Step 3. The package is contained in the java/sql/ folder, which is exactly as it should be according to the calling code snippet above.
Now that we've installed the JDBC classes, let's cover how you load a JDBC driver. Note that the java.sql.* must be imported into your Java program if you want to use a JDBC driver. These JDBC base classes contain the necessary elements for properly instantiating JDBC drivers, and they serve as the "middleman" between you and the low-level code in the JDBC driver. The JDBC API provides you with an easy-to-use interface for interacting with data sources, independent of the driver you are using. The following sections cover three different ways to tell the JDBC's DriverManager to load a JDBC driver.
When you want to identify a list of drivers that can be loaded with the DriverManager, you can set the sql.drivers system property. Because this is a system property, it can be set at the command line using the -D option:
java -Dsql.drivers=imaginary.sql.iMsqlDriver classnameIf there is more than one driver to include, just separate them using colons. If you do include more than one driver in this list, the DriverManager will look at each driver once the connection is created and decide which one matches the JDBC URL supplied in the Connection class' instantiation. (I'll provide more detail on the JDBC URL and the Connection class later on.) The first driver specified in the URL that is a successful candidate for establishing the connection will be used.
You can explicitly load a driver using the standard Class.forName method. This technique is a more direct way of instantiating the driver class that you want to use in the Java program. To load the mSQL JDBC driver, insert this line into your code:
Class.forName("imaginary.sql.iMsqlDriver");This method first tries to load the imaginary/sql/iMsqlDriver from the local CLASSPATH. It then tries to load the driver using the same class loader as the Java program-the applet class loader, which is stored on the network.
Another approach is what I call the "quick and dirty" way of loading a JDBC driver. In this case, you simply instantiate the driver's class. Of course, I don't advise you to take this route because the driver may not properly register with the JDBC DriverManager. The code for this technique, however, is quite simple and worth mentioning:
new imaginary.sql.iMsqlDriver;Again, if this is in the applet context, this code will first try to find this driver in the local CLASSPATH, then it will try to load it from the network.
The format for specifying a data source is an extended Universal Resource Locator (URL). The JDBC URL structure is broadly defined as follows
jdbc:<subprotocol>:<subname>where jdbc is the standard base, subprotocol is the particular data source type, and subname is an additional specification that can be used by the subprotocol. The subname is based solely on the subprotocol. The subprotocol (which can be "odbc," "oracle," etc.) is used by the JDBC drivers to identify themselves and then to connect to that specific subprotocol. The subprotocol is also used by the DriverManager to match the proper driver to a specific subprotocol. The subname can contain additional information used by the satisfying subprotocol (i.e. driver), such as the location of the data source, as well as a port number or catalog. Again, this is dependent on the subprotocol's JDBC driver. JavaSoft suggests that a network name follow the URL syntax:
jdbc:<subprotocol>://hostname:port/subsubnameThe mSQL JDBC driver used in this book follows this syntax. Here's the URL you will see in some of the example code:
jdbc:msql://mycomputer.com:1112/databasenameThe DriverManager.getConnection method in the JDBC API uses this URL when attempting to start a connection. Remember that a valid driver must be registered with the JDBC DriverManager before attempting to create this connection (as I discussed earlier in the Registering and Calling JDBC Drivers section). The DriverManager.getConnection method can be passed in a Property object where the keys "user," "password," and even "server" are set accordingly. The direct way of using the getConnection method involves passing these attributes in the constructor. The following is an example of how to create a Connection object from the DriverManager.getConnection method. This method returns a Connection object which is to be assigned to an instantiated Connection class:
Chapter 4 shows a complete example of how to use the DriverManager and Connection classes, as well as how to execute queries against the database server and get the results.
In an effort to close the gap between existing ODBC drivers for data sources
and the emerging pure Java JDBC drivers, JavaSoft and Intersolv released the
There are three steps to installing the
1. Uncompress the package.
2. Move the jdbc directory (located in the jdbc-odbc/classes directory) into a directory listed in your CLASSPATH, or move it to your regular Java API tree.
3. Move
JdbcOdbc.dll into your java/bin directory to make sure that the system and Java
executables can find the file. You can also:
For Unix:
. Add the path location of the JdbcOdbc.dll to your LD_LIBRARY_PATH, or move the DLL into a directory covered by this environment variable.
For Windows 95:
. Move the DLL into the \WINDOWS\SYSTEM directory.
The data sources for the ODBC driver and the drivers themselves must be configured before you can run Java programs that access them. Consult your platform documentation and ODBC server's documentation for specific information.
One of the great features of the Bridge is that it allows you to use
existing data sources to start developing database-aware Java applications. And
with Access, you don't even need a database server! In Chapter 11, I present
the full source code for writing an application server that can use the
To set up an Access database for ODBC, follow these steps (I'm assuming that you are using Windows 95):
1. Make sure you have the Access 95 ODBC drivers installed. These ODBC drivers can be installed from the Access install program.
2. Select Start Menu|Settings|Control Panels.
3. Click on 32 bit ODBC.
4. Click on the Add button and choose the Access Driver.
5. Type in a Data Source Name and Description (anything you like).
6. In the Database area, click on Select.
7. Select the Access database file; a sample database is located in MSoffice\ACCESS\Samples (if you installed it during the Access installation). However, you can specify any Access database you want.
8. You may want to click on the Advanced button and set the Username and Password. Click on OK and then on Close to complete the configuration.
That is all you need to do to set up the ODBC data source. Now you can write Java applications to interact with the data source on the machine in which you performed the configuration; the ODBC driver is not directly accessible over the network. You can access the data source by using the name you supplied in Step 5. For example, the URL would be something like
jdbc:odbc:DataSourceNameand the statement
Class.forName("jdbc.odbc.JdbcOdbcDriver")would load the JDBC-ODBC bridge.
The next chapter works through a complete example of using a JDBC driver. I use the mSQL driver to query an mSQL database server over the network. The JDBC driver can easily be changed to use an ODBC driver or another JDBC driver to connect to a different data source.
|