1. What's the JDBC 2.0 API?
The JDBC 2.0 API is the latest update of the JDBC API. It contains many
new features, including scrollable result sets and the new SQL:1999 (formerly
SQL 3) data types. There are two parts to the JDBC 2.0 API:
the JDBC 2.0 core API (the java.sql package), which
is included in the JavaTM 2 SDK, Standard Edition
the JDBC 2.0 Optional Package API (the javax.sql package), which
is available separately or as part of the Java 2 SDK, Enterprise Edition
2. Does the JDBC-ODBC Bridge
support the new features in the JDBC 2.0 API?
No, the JDBC-ODBC Bridge that is included in the Java 2 Platform
initial release does not support the new features in the JDBC 2.0 API. However,
Sun and Merant are working to produce a new version of the Bridge that does
support the new features. Note that we do not recommend using the Bridge except
for experimental purposes or when you have no other driver available.
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. It is also possible to use the JDBC-ODBC bridge with
applets that are run in the HotJavaTM browser (available from Java Software),
since HotJava provides an option to turn off applet security. 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. Does the JDK include the
JDBC API and the JDBC-ODBC Bridge?
Yes, the JDK 1.1 and the Java 2 SDK, Standard Edition (formerly known
as the JDK 1.2), contain both the JDBC API and the JDBC-ODBC Bridge. The Java 2
SDK, Standard Edition, contains the JDBC 2.0 core API, which is the latest
version. It does not include the JDBC 2.0 Optional Package, which is part of
the Java 2 SDK, Enterprise Edition, or which you can download separately.
Note that the version of the JDBC API and the JDBC-ODBC Bridge provided
for separate download on the JDBC download page are only for use with the JDK
1.0.2.
7. What JDBC
technology-enabled drivers are available?
See our web page on JDBC technology-enabled
drivers for a current listing.
8. 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.
9. 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.
10. Does the JDBC-ODBC
Bridge work with Microsoft J++?
No, J++ does not support the JDBC-ODBC bridge since it doesn't
implement the Java Native Interface (JNI). Any all-Java JDBC driver should work
with J++, however.
11. 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.
12. 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.
13. Why doesn't calling the
method Class.forName load my JDBC driver?
There is a bug in the JDK 1.1.x that can cause the method Class.forName to fail. A
workaround is to explicitly call the method DriverManager.registerDriver(new
YourDriverClass()). The exact problem in the JDK is a race condition in the class loader
that prevents the static section of code in the driver class from executing and
registering the driver with the DriverManager.
14. Why do the java.sql
and java.math packages fail to download java.*
packages? Is there a workaround?
For security reasons, browsers will not download java.* packages. In
order to use the JDBC API with browsers that have not been upgraded to JDK1.1
or beyond, we recommend that the java.sql and java.math packages be
renamed jdbc.sql and jdbc.math. Most vendors
supplying JDBC technology-enabled drivers that are written purely in the Java
programming language already provide versions of these renamed packages. When
JDK 1.1 support has been added to your browser, you should convert your applets
back to the java.* package names.
15. Why is the precision of java.math.BigDecimal limited to 18 digits in the JDK 1.0.2 add-on
version of the JDBC API?
In JDK 1.1, java.math.BigInteger is implemented
in C. It supports a precision of thousands of digits. The same is true for BigDecigmal.
The version of BigInteger provided with the JDK 1.0.2
add-on version of the JDBC API is a simplified version written in the Java
programming language, and it is limited to 18 digits. Because the
implementation of BigDecimal is based on BigInteger, it also is
limited to this precision.
In the JDBC 2.0 API, you can use a new version of the method ResultSet.getBigDecimal that does not
take a scale parameter and returns a BigDecimal with full
precision.
16. Can the JDBC API be
added to JDK 1.0.2?
Yes. Download the JDBC 1.22 API from the
JDBC download page and follow the installation instructions in the
release notes.
If you are using any version of the JDK from 1.1 on, the JDBC API is
already included, and you should not download the JDBC 1.22 API.
17. 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.
18. 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
19. 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.
20. 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.
21. 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
.
22. Does the JDBC-ODBC
Bridge developed by Merant and Sun support result sets that contain Japanese
Characters (DBCS)?
Yes, but we haven't tested this ourselves. The version of the Bridge in
the Java 2 SDK, Standard Edition, and Java 2 SDK, Enterprise Edition, also
supports a new charSet Connection property for
specifying the character encoding used by the underlying DBMS.
23. 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.
24. 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.
25. 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.
26. 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.
27. 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.
28. 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.
No comments:
Post a Comment