-
-
1. What's the JDBC 3.0 API?
The JDBC 3.0 API is the latest update of the JDBC API.
It contains many features, including scrollable result
sets and the SQL:1999 data types.
-
2. Does the JDBC-ODBC Bridge support the new features in the JDBC 3.0 API?
The JDBC-ODBC Bridge provides a limited subset of the JDBC 3.0 API.
-
3. Can the JDBC-ODBC Bridge be used with applets?
Use of the JDBC-ODBC bridge from an untrusted applet running in a browser,
such as Netscape Navigator, isn't allowed.
The JDBC-ODBC bridge doesn't allow untrusted code to call it
for security reasons. This is good because it means that an
untrusted applet that is downloaded by the browser can't circumvent
Java security by calling ODBC. Remember that ODBC is native code,
so once ODBC is called the Java programming language can't guarantee that a security violation
won't occur. On the other hand, Pure Java JDBC drivers work well with
applets. They are fully downloadable and do not require any
client-side configuration.
Finally, we would like to note that it is possible to use the
JDBC-ODBC bridge with applets that will be run in appletviewer since
appletviewer assumes that applets are trusted. In general, it is
dangerous to turn applet security off, but it may be appropriate in
certain controlled situations, such as for applets that will only be
used in a secure intranet environment. Remember to exercise caution
if you choose this option, and use an all-Java JDBC driver whenever possible
to avoid security problems.
-
4. How do I start debugging problems related to the JDBC API?
A good way to find out what JDBC calls are doing is to enable
JDBC tracing. The JDBC trace contains a detailed listing of the activity occurring
in the system that is related to JDBC operations.
If you use the DriverManager facility
to establish your database connection, you use the
DriverManager.setLogWriter method to enable tracing
of JDBC operations. If you use a DataSource object
to get a connection, you use the DataSource.setLogWriter
method to enable tracing. (For pooled connections, you use the
ConnectionPoolDataSource.setLogWriter method, and for
connections that can participate in distributed transactions, you
use the XADataSource.setLogWriter method.)
-
5. How can I use the JDBC API to access a desktop database like Microsoft Access over the network?
Most desktop databases currently require a JDBC solution that uses
ODBC underneath. This is because the vendors of these database
products haven't implemented all-Java JDBC drivers.
The best approach is to use a commercial JDBC driver that supports
ODBC and the database you want to use. See the
JDBC drivers page for a list of
available JDBC drivers.
The JDBC-ODBC bridge from Sun's Java Software does not provide network access
to desktop databases by itself. The JDBC-ODBC bridge loads ODBC as a
local DLL, and typical ODBC drivers for desktop databases like Access
aren't networked. The JDBC-ODBC bridge can be used together with the
RMI-JDBC bridge, however, to access a desktop database like Access over the net. This
RMI-JDBC-ODBC solution is free.
-
6. What JDBC technology-enabled drivers are available?
See our web page on JDBC technology-enabled
drivers for a current listing.
-
7. What documentation is available for the JDBC API?
See the JDBC technology home page
for links to information about JDBC technology. This page links to
information about features and benefits, a list of new
features, a section on getting started, online tutorials,
a section on driver requirements, and other information
in addition to the specifications and javadoc documentation.
-
8. Are there any ODBC drivers that do not work with the
JDBC-ODBC Bridge?
Most ODBC 2.0 drivers should work with the Bridge. Since there is some
variation in functionality between ODBC drivers, the functionality of the
bridge may be affected. The bridge works with popular PC databases, such
as Microsoft Access and FoxPro.
-
9. What causes the "No suitable driver" error?
"No suitable driver" is an error that usually occurs during a
call to the DriverManager.getConnection method.
The cause can be failing to load the appropriate JDBC drivers
before calling the getConnection method, or it
can be specifying an invalid JDBC URL--one that isn't
recognized by your JDBC driver. Your best bet is to check
the documentation for your JDBC driver or contact your
JDBC driver vendor if you suspect that the URL you are
specifying is not being recognized by your JDBC driver.
In addition, when you are using the JDBC-ODBC Bridge, this
error can occur if one or more the the shared libraries
needed by the Bridge cannot be loaded. If you think this
is the cause, check your configuration to be sure that the
shared libraries are accessible to the Bridge.
-
10. Why isn't the java.sql.DriverManager class being found?
This problem can be caused by running a JDBC applet in a browser
that supports the JDK 1.0.2, such as Netscape Navigator 3.0.
The JDK 1.0.2 does not contain the JDBC API, so the
DriverManager class typically isn't found by the
Java virtual machine running in the browser.
Here's a solution that doesn't require any additional configuration
of your web clients. Remember that classes in the java.*
packages cannot be downloaded by most browsers for security
reasons. Because of this, many vendors of all-Java JDBC drivers
supply versions of the java.sql.* classes that have
been renamed to jdbc.sql.*, along with a version
of their driver that uses these modified classes. If you import
jdbc.sql.* in your applet code instead of
java.sql.*, and add the jdbc.sql.*
classes provided by your JDBC driver vendor to your applet's
codebase, then all of the JDBC classes needed by the applet
can be downloaded by the browser at run time, including the
DriverManager class.
This solution will allow your applet to work in any client
browser that supports the JDK 1.0.2. Your applet will also work
in browsers that support the JDK 1.1, although you may want to
switch to the JDK 1.1 classes for performance reasons. Also,
keep in mind that the solution outlined here is just an example
and that other solutions are possible.
-
11. How do I retrieve a whole row of data at once, instead of
calling an individual ResultSet.getXXX method for each column?
The ResultSet.getXXX methods are the only way to
retrieve data from a ResultSet object, which means that you
have to make a method call for each column of a row. It is unlikely that
this is the cause of a performance problem, however, because it is
difficult to see how a column could be fetched without at least the
cost of a function call in any scenario. We welcome input from developers
on this issue.
-
12. Why does the ODBC driver manager return 'Data source name not found and no default
driver specified Vendor: 0'
This type of error occurs during an attempt to connect to a database with the bridge.
First, note that the error is coming from the ODBC driver manager. This indicates that the
bridge-which is a normal ODBC client-has successfully called ODBC, so the problem isn't due
to native libraries not being present. In this case, it appears that the error is due to the
fact that an ODBC DSN (data source name) needs to be configured on the client machine.
Developers often forget to do this, thinking that the bridge will magically find the DSN they
configured on their remote server machine
-
13. Are all the required JDBC drivers to establish connectivity to my database part of the JDK?
No. There aren't any JDBC technology-enabled drivers bundled with the
JDK 1.1.x or Java 2 Platform releases other than the JDBC-ODBC Bridge.
So, developers need to get a driver and install it before they can
connect to a database. We are considering bundling JDBC technology-
enabled drivers in the future.
-
14. Is the JDBC-ODBC Bridge multi-threaded?
No. The JDBC-ODBC Bridge does not support concurrent access
from different threads. The JDBC-ODBC Bridge uses synchronized methods to
serialize all of the calls that it makes to ODBC. Multi-threaded Java
programs may use the Bridge, but they won't get the advantages of
multi-threading. In addition, deadlocks can occur between locks
held in the database and the semaphore used by the Bridge. We are
thinking about removing the synchronized methods in the future. They
were added originally to make things simple for folks writing Java
programs that use a single-threaded ODBC driver.
-
15. Does the JDBC-ODBC Bridge support multiple concurrent open
statements per connection?
No. You can open only one Statement object per connection
when you are using the JDBC-ODBC Bridge.
-
16. Why can't I invoke the ResultSet methods
afterLast and beforeFirst when the method
next works?
You are probably using a driver implemented for the JDBC 1.0 API. You
need to upgrade to a JDBC 2.0 driver that implements scrollable result sets.
Also be sure that your code has created scrollable result sets and that the
DBMS you are using supports them.
-
17. How can I retrieve a String or other object type
without creating a new object each time?
Creating and garbage collecting potentially large numbers of objects
(millions) unnecessarily can really hurt performance. It may be better
to provide a way to retrieve data like strings using the JDBC API without
always allocating a new object.
We are studying this issue to see if it is an area in which the JDBC API
should be improved. Stay tuned, and please send us any comments you have
on this question.
-
18. There is a method getColumnCount in the JDBC API.
Is there a similar method to find the number of rows in a result set?
No, but it is easy to find the number of rows. If you are using
a scrollable result set, rs, you can call the methods
rs.last and then rs.getRow to find out how
many rows rs has. If the result is not scrollable,
you can either count the rows by iterating through the result set
or get the number of rows by submitting a query with a COUNT
column in the SELECT clause.
-
19. I would like to download the JDBC-ODBC Bridge for the Java 2
SDK, Standard Edition (formerly JDK 1.2). I'm a beginner with the
JDBC API, and I would like to start with the Bridge. How do I do it?
The JDBC-ODBC Bridge is bundled with the Java 2 SDK, Standard
Edition, so there is no need to download it separately.
-
20. If I use the JDBC API, do I have to use ODBC underneath?
No, this is just one of many possible solutions. We recommend using
a pure Java JDBC technology-enabled driver, type 3 or 4, in order to get
all of the benefits of the Java programming language and the JDBC API.
-
21. Once I have the Java 2 SDK, Standard Edition, from Sun, what else
do I need to connect to a database?
You still need to get and install a JDBC technology-enabled driver
that supports the database that you are using. There are many drivers available
from a variety of sources. You can also try using the JDBC-ODBC Bridge
if you have ODBC connectivity set up already. The Bridge comes with the
Java 2 SDK, Standard Edition, and Enterprise Edition, and it doesn't
require any extra setup itself. The Bridge is a normal ODBC client.
Note, however, that you should use the JDBC-ODBC Bridge only
for experimental prototyping or when you have no other driver available.