Informix
Informix Online Documentation

RELEASE NOTES FOR

Informix JDBC Driver

Date: 02/01/00

Version: 2.11


Table of Contents

I. Overview of Release Notes
II. Informix Database Server Compatibility
III. Configuration
IV. Installation on Solaris Machines
V. Installation on HP Machines
VI. Installation on Windows
VII. Uninstallation on Windows
VIII. Quoting The URL String
IX. New Features
X. WHERE CLAUSE Behavior Change
XI. Database Connections in The Examples
XII. General Informix JDBC Driver Limitations
XIII. Error Messages
XIV. Known Problems
XV. Fixed Problems
A. Fixed Problems in 2.11
B. Fixed Problems in 2.1


I. Overview of Release Notes

The purpose of these release notes is to make you aware of any special actions required to configure and use the Informix JDBC Driver on your computer. This file also describes feature and performance topics not covered in the Informix JDBC Driver Programmer's Guide. In addition, this file contains information about known bugs and their workarounds.

This release notes document is not intended to be all-inclusive; it should be used as an addendum to the Informix JDBC Driver Programmer's Guide, Version 2.1, which provides thorough information about product features and behavior.

These release notes are written for Java programmers who use the JDBC API to connect to Informix databases via the Informix JDBC Driver.


II. Informix Database Server Compatibility

Informix JDBC Driver 2.1 is compatible with the following database server versions:


III. Configuration

To use the Informix JDBC Driver directly, you must have a JDK 1.2 (or later) package on your platform. Please refer to http://splash.javasoft.com/jdbc/ for details.


IV. Installation on Solaris Machines

Before installing Informix JDBC Driver Version 2.1 on Solaris machines, make sure that the DISPLAY environment variable is set.


V. Installation on HP Machines

Installation of Informix JDBC Driver Version 2.1 fails on HP machines, Versions 10.20 and 11.00, because of a bug in the HP 1.2 beta version of JDK. The problem has been reported to HP. Because of this problem, Informix JDBC Driver has not been tested with HP JDK Version 1.2. (This is Bug #118048.)


VI. Installation on Windows

To install Informix JDBC Driver Version 2.1 on Windows, you must have administrator privileges. The following error occurs if you do not have administrator privileges: "Unable to create an entry for this application in the control panel Add/Remove property list."


VII. Uninstallation on Windows

If JDK 1.2.2 is installed and you uninstall Informix JDBC Driver on Windows NT, InstallShield displays the following message:

ifxjdbc.jar has changed since it was created. Delete anyway?

The same message appears for ifxjdbc-g.jar. Even if your response is 'yes' to remove the files, the lib directory remains with the JAR files under it. You must manually remove the lib directory.


VIII. Quoting The URL String

When running demo programs on a UNIX machine, you can qoute the URL string using single quotes, double quotes, or no quotes. The following example shows single quotes (a URL must be on one line):

java demo1 'jdbc:informix-sqli://mymachine:1526:INFORMIXSERVER=myserver; user=myname;password=mypasswd'

When running demo programs on an NT machine, you can use double quotes or no quotes, as in the following example (a URL must be on one line):

java demo1 jdbc:informix-sqli://mymachine:1526:INFORMIXSERVER=myserver; user=myname;password=mypasswd

If you quote the URL string using single quotes on an NT machine, you see the following messages:

ERROR: failed to connect! MSG: No suitable driver


IX. New Features

There are no new features for release 2.11 of the JDBC Driver. See the section, <xr>Fixed Problems, for a list of problems that have been fixed in this release.

The following section lists the new features for release 2.1 of the JDBC Driver.

New Features for 2.1

The new features for release 2.1 of the Informix JDBC Driver are as follows:


X. WHERE CLAUSE Behavior Change

You may see some differences in the behavior of WHERE clauses that used to work with JDBC Versions 1.x and 2.0 but fail with Version 2.1. The server does not send WHERE column type data back to the driver for WHERE clauses, so in cases of ambiguity (BOOLEAN, LVARCHAR, TEXT, BYTE, BLOB and CLOB types) the driver cannot determine what type of data to send to the server. For example, suppose you use the following statement:

The 1.x or 2.0 driver would incorrectly assume that the first '?' matched the 1st column (a) in the project list and the second '?' matched the 2nd column (b) in the project list. This was an incorrect assumption, because the statement could have been as follows:

This bug has been fixed in Version 2.1. In cases of ambiguity, use the PreparedStatement extensions to explicitly tell the driver what the WHERE column data types is. These extensions are described in Chapter 3 of the "Informix JDBC Driver Programmer's Guide, Version 2.1."


XI. Database Connections in The Examples

Except for the pickaseat demo, the examples listed in the "Informix JDBC Driver Programmer's Guide, Version 2.1" use the DriverManager.getConnection() method to get a database connection. Sun Microsystems recommends using a DataSource object instead. For more information, refer to Sun's documentation and to the README.TXT file in the <installdir>/demo/pickaseat directory.


XII. General Informix JDBC Driver Limitations

Please refer to the "Informix JDBC Driver Programmer's Guide, Version 2.1" for a complete list of unsupported methods in Informix JDBC driver. Additional general limitations are as follows:


XIII. Error Messages

A. RSAM ERROR MESSAGES ------------------------

RSAM messages are chained to SQLCODE messages. For example, if an SQLCODE message says that a table cannot be created, the RSAM message states the reason, which might be insufficient disk space.

You can use the SQLException.getNextException() method to catch RSAM error messages. For an example of how to catch these messages, see the ErrorHandling.java file in the <JDBCinstalldir>/demo/basic directory.

The error messages that were listed in the release notes for release 2.1 have been incorporated into release 2.11. They are documented in the Informix JDBC Driver Programmer's Guide, version 2.1. You can access this manual on the Web from Informix Answers Online.


XIV. Known Problems

This section describes the known problems with this release of the Informix JDBC Driver and explains how to work around them, if possible.

Bug #101669

Informix JDBC driver 1.4 does not support code set conversion of CLOB or TEXT types. A workaround for TEXT types is described in the section, "Code Set Conversion for TEXT Data Types."

Bug #103756

Collections and rows are not supported in opaque types.

Bug #125393

GL_DATE environment variable leads to SQLEXCEPTION from 8.30 server.

Bug #125414

Internal error reported when getXaConnection() is called with 8.30 database server.

Vendor-Specific Problems

This section describes the known problems with this release of the Informix JDBC Driver and explains how to work around them, if possible.

Bug #113595

Informix JDBC Driver does not support the Statement.cancel() method.

Bug #116246

Silent install requires the DISPLAY environment variable to be set on Unix machines.

Bug #118048

A core dump occurs when you attempt to install Informix JDBC Driver Version 2.1.JC1A on an HP 11.00 machine that has JDK 1.21 already installed. You can work around this problem by first setting the LANG environment variable to C.iso88591.


XV. Fixed Problems

The following sections describe the problems that have been fixed in this release.

A. Fixed Problems in 2.11

The following problems have been fixed in this release.

Bug #122429

BLOB insert performance increase using the TCP_NODELAY option for the socket.

Bug #122866

A read from blob stream does not return -1 after reading the blob.

Bug # 123043

When launching a JDBC applet in a Web browser, the http connection searches for non-existent classes on both the client and the server, prolonging the time it takes to make the connection.

Bug #123721

IFXSMARTBLOB, IFXLOCOLINFO does not work. It always returns NULL.

Bug #124017

Unable to connect to database because en-gb locale is not supported.

Bug #124089

The JDBC driver fails when querying timeseries type information.

Bug #124090

When querying the database to retrieve timeseries type information, the JDBC driver raises an exception because of bug #124059.

Bug # 124372

GETCROSSREFERENCE method does not return proper KEY_SEQ for foreign key

Bug # 124374

PreparedStatement.setObject(INT, OBJECT) is not accepting array object defined in Java.

Bug # 124400

When using the column name to get the rows for dbmetadata.getCatalog, the jdbc driver returns "No such column name"

Bug # 124466

Unable to insert into a collection using array object, if the collection has row type as an element.

B. Fixed Problems in 2.1

The following problems have been fixed since the JDBC Version 1.22 release:

Bug #105652

The stores7 demo does not work for all servers.

Bug #103767

The error message is misleading when the setTransactionIsolation method() is executed on a connection before a database has been selected.

Bug #106210

RMI server database connections fail when you use a JDBC application with Sun's JDK version 1.2.

Bug #106343

The browse dialog for selecting the target directory does not work properly for the NT or UNIX installation of Informix JDBC Driver.

Bug #106643

When you retrieve values into an IntervaLDF (day-to-fraction) object, sometimes you get a NegativeArraySizeException error.

Bug #107696

The DatabaseMetaData.getTable() method does not return the correct owner information.

Bug #107732

Subtracting two DATETIME values within an SQL statement returns an INTERVAL value, but the driver gives the null ix000 internal error or error -79716.

Bug #107771

Selecting a DATE column does not return correct era year when the DBDATE or GL_DATE variable is set to display era years.

Bug #104831

The database server converts row type names to lower case, but Informix JDBC driver and the map.put() and map.get() methods do not, so map.put() with a non-lowercase name fails.

Bug #105286

The DatabaseMetaData.getCatalogs() method needs to support selecting database names even if the server does not have the sysmaster database. Servers prior to 6.0 do not support the sysmaster database.

Bug #105447

If you use the ResultSet.getstring method on a MONEY column, two trailing zeros and a decimal place are absent for even dollar amounts (for example, you get 5 instead of 5.00).

Bug #104640

The server name is missing from the message text when you attempt to connect to an instance that is down.

Bug #101575

A distinct of an opaque type and a distinct of a complex type are not supported as complex type elements.

Bug #95375

The executeUpdate() method raises an exception (sq_err=100) for a DELETE FROM TABLE statement if the table is empty.

Bug #106323

The GLS Japanese codeset ja_jp.EUC_JP is not supported in JDBC.

Bug #106611

The driver does not work with the Netscape browser when applets are not signed.

Bug #104220

The code set "GB" returns the exception "iso2022cn_gb" when you retrieve data.

Bug #101172

Clob and Blob types are not supported in complex types.

Bug #103468

A distinct type is sometimes cast to a DATETIME MONTH TO DAY type.

Bug #103620

The com.informix.jdbc.ifxdriver.acceptsURL() method returns true or throws an exception when the correct result should be false for an invalid URL.

Bug #101948

If Resultset.getDate() calls a char or varchar date string representation of the DBDATE setting, this causes SQLException -79716 if the string has a 1-digit month or day.

Bug #99333

The DatabaseMetaData.getDatabaseProductVersion() method returns an error instead of the product version.

Bug #99323

If all the columns of a table have a particular table-level privilege, such as UPDATE, the DatabaseMetaData.getColumnPrivileges() method returns no rows when executed on the table. If, however, only some of the columns have a particular privilege, then those columns are returned by the method. This is true for all table-level privileges.

Bug #99180

When an SQLException is thrown after a database access error, the SQLException object contains the error message and error code, but not the ISAM code.

Bug #98905

The following Informix JDBC Driver error messages do not contain the name of the method that caused the error:

-79700 Method not supported -79729 Method can not take argument -79750 Method only for queries

Bug #105092

On UNIX platforms, Informix JDBC driver installation sets directory permissions readable by group but not by all.

Bug #104540

If a CHAR column has spaces at the beginning of the string, these spaces are lost when you select this value into a Java string.

Bug #103963

Temporary tables created by the databaseMetaData class methods are not dropped when the associated result set object is closed or goes out of scope.

Bug #103755

ResultSet.getByte() returns 0 and getShort() returns error 23552 on a decimal value when the value overflows a byte and short value.

Bug #102885

A call to driverManager.getConnection() with a URL that does not include the user and password gives error 25563.

Bug #102567

The DatabaseMetaData.getImportedKeys() and getExportedKeys() methods return only the 1st element of a composite foreign key.

Bug #102467

DatabaseMetaData temporary table data types do not take long id servers into consideration.

Bug #102194

Database warnings are not propagated up to the Connection object on a 5.x server.

Bug #101921

Missing keywords in the URL cause the client to crash with classCastException.

Bug #101881

You cannot connect using a non-password login account.

Bug #101175

Informix JDBC driver always maps a DATETIME column to YEAR TO FRACTION(5) and TIMESTAMP. If the column is HOUR TO SEC, the driver should map this to a TIME column.

Bug #100189

Informix JDBC driver memory leak - repeated calls to the Java API executeQuery() method after calling createStatement() cause the session size to grow on the server.

Bug #99684

ResultSet becomes null in a large application.

Bug #99513

A Type-4 driver crashes a 7.30.FC4 IDS server while querying a TEXT data type.

Bug #99442

When multiple threads are executing as a result of a getBestRowIdentifier call, a single connection error is returned.

Bug #99440

The "Cannot read network user authorization file" error occurs when multiple threads are sharing a connection.

Bug #102916

If a projection list in a SELECT statement includes an NCHAR column, all columns after the NCHAR column contain corrupted data.

Bug #102213

In the ResultSet.getBytes() and ResultSet.getBlob() methods, the first position of a Blob object starts at 0 instead of 1 as the JavaSoft documentation specifies.

Bug #102221

Interval data is not supported in complex types.

Bug #102285

The ClassGenerator utility always maps a DATETIME column to a Timestamp object, when it should map to a Time object.

Bug #102292

If you use a SELECT * FROM TAB statement, where TAB is a multibyte japanese table with mb japanese columns, you get a "system or internal error" exception.

Bug #102816

If you set SETFETCHSIZE to 10 or any number, an incorrect fetch size exception is given.

Bug #102817

Calling the ResultSet.previous() method after calling the ResultSet.afterLast() method does not move the pointer to the previous record even when the record is present.

Bug #101177

Inserting CHAR or VARCHAR strings in nested collections results in garbled data if strings are of variable length.

Bug #102028

The ResultSetMetaData.getColumns() method returns 2000 as the column type for a BLOB or CLOB column instead of 2004 for BLOB and 2005 for CLOB (types.blob and types.clob).

Bug #103235

It is not possible to create a BLOB or CLOB column in a non-default dbspace.

Bug #103275

An MI_INTERVAL object is not supported for opaque types.

Bug #103288

When the IfxSmartBlob.IfxLoSeek() method is called, an exception is thrown with a null message and error -7532.

Bug #103491

The Array.getArray(long, int) method behaves as if the index starts with 0. According to the lastest documentation, it is supposed to start with 1.

Bug #103505

The IfxLoRead and IfxLoSeek methods return invalid errors if you seek within a BLOB object beyond the available size and try to read the data.

Bug #104024

Fetching a distinct of an opaque column returns the java.sql.sqlexception "can't convert to: int".

Bug #105312

The DatabaseMetaData.getUserName() method should return a username to the connection instead of null when a trusted client is used.

Bug #106131

The DatabaseMetaData.getColumns() method fails with "(colmin) not found" when Informix JDBC Driver is connected to an INFORMIX-SE database.

Bug #106209

The ResultSet.getString() method does not fully support INTERVAL data types when the INTERVAL qualifier is not YEAR TO MONTH or DAY TO SECOND. For example, YEAR TO YEAR is not supported.

Bug #106344

Performing an uninstall in NT does not clean up the lib directory.

Bug #106348

When you uninstall Informix JDBC Driver in UNIX, the Delete/Confirm dialog box is not shown proportionately. It is shown as a vertical and narrow box.

Bug #106698

Several DatabaseMetaData methods return the wrong values. The supportsANSI92IntermediateSQL(), supportsANSI92FullSQL(), supportsOrderByUnrelated(), and supportsOpenCursorsAcrossCommit() methods should all return false. The usesLocalFilePerTable() and usesLocalFiles() methods should return true for an INFORMIX-SE server.

Bug #106750

The ClassGenerator utility does not generate the correct code for nested rows.

Bug #106904

If the ResultSet.afterLast() method returns ROWID 9, executing the ResultSet.previous() method should return ROWID 7. It should be ROWID 8.

Bug #106940

The ResultSet.isBeforeFirst() and isAfterLast() methods are not working correctly.

Bug #107011

An NT client and server both transport floating point values as decimals.

Bug #108780

The databasemetadata methods use LocalFiles() and usesLocalFilePerTable() return true if you are using a 5.x online server. They should return false.

Bug #108526

The getCatalogs() method returns a null pointer exception for the databasemetadata class.

Bug #107932

If you call the databasemetadata getTables() method and provide a specific table or schema, the owner and name qualified by getTables() returns incorrect information.

Bug #105570

The message class that gives the full text of an error message, which is similar to the finderr utility, does not work for positive values such as +100.

Bug #107892

When doing string to DATE, TIMESTAMP, or DATETIME conversion, the driver does not take the DBCENTURY setting into account if the year is less then 3 digits.

Bug #112494

Updating a CLOB variable results in the following error: Failed: java.sql.SQLException:No cast from byte to clob. BLOB type columns can be updated without errors.

Bug #105632

Trying to select a multiset(decimal(15)) element from a row results in a stringindexoutofboundsexception:string index out of range:-9 error.

Bug #95082

The ResultsetMetaData.getTableName() method returns an empty string when called. It should return a table name.

Bug #106354

Unsupported methods throw exceptions that cause some applications running on heterogenous database servers to prematurely abort.

Bug #108019

Batch update fails if you attempt to insert rows with TEXT or BYTE columns.

Bug #108234

If the SECURITY=PASSWORD option is not included in the URL when you connect to a CSM enabled server, the application hangs and no error is given.

Bug #108295

The setCharacterStream() and getCharacterStream() methods are not supported.

Bug #108496

If the Connection.setTransactionIsolation() method is called in the middle of a transaction, it should trigger the commit call, but instead it returns an error.

Bug #108497

An OUTOFMEMORYERROR or NEGATIVEARRAYSIZEEXCEPTION error occurs because the stream.readObject() method returns a null instead of returning an error that this is the wrong method to call. Since this is a named row, you should call the getClob() or getBlob() method instead.

Bug #117614

A user implementation of the SQLData interface that calls the readString() method when reading an LVARCHAR field in a named row returns error -79716.

Bug #116652

The DatabaseMetaData.supportsTransactionIsolationLevel(level) method always returns TRUE, even if the value for level is invalid.

Bug #116596

When you attempt to insert data into an IfxDocDesc UDT column defined by the Text Datablade, you get error -937 or -7402.

Bug #115578

If you open one connection for an INSERT, read smart large object data via a second connection, and then try to read data via the first connection, locks remain on rows even after you close the result set and statement objects.

Bug #115082

Bulk insert in JDBC 1.5 doesn't work with 7.31 server. It hangs while executing PreparedStatement.executeBatch() when IFX_USEPUT = 1 is set.

Bug #113453

The DatabaseMetaData.getSchemaTerm() method returns "database", but it should return "user".

Bug #113231

Executing the SQL statement "DATABASE <dbname>" does not set the database name in the connection object, so the Connection.getCatalog() method returns NULL even if a current database exists.

Bug #112681

The driver gives a syntax error when curly brackets, {}, appear in an SQL string. For example, in the statement "insert into x values ('This inserts { characters }')", the syntax is correct but generates an error.

Bug #112621

Complex type error returned: "Type requested (unknown) doesn't match row type information (unknown) type." The type information should be completed and not "unknown".

Bug #112514

The IfmxComplexOutput.writeObject() method does not support fixed length opaque types.

Bug #111604

JDBC 2.0 does not work with JDK 1.2.x with a HotSpot VM plug-in.

Bug #111207

The CallableStatement interface's methods are not supported, so there is no way to retrieve OUT parameters.

Bug #111098

When the driver queries the server for opaque, distinct, or complex type information based on a name, it uses the current user's name. A type created by the user "informix" is not found.

Bug #110910

The DatabaseMetaData.getPrimaryKeys() method returns NULL for 9.14 servers, but works for 9.20 servers.

Bug #110888

ISAM errors cannot be retrieved.

Bug #110342

The Connection.prepareCall("{ ? = myfunc(?) }") method is translated to "execute procedure" syntax, but should be translated to "execute function" syntax instead.

Bug #101735

All messages are only displayed in English, regardless of the CLIENT_LOCALE setting.

Bug #116367

The driver is unable to connect to the standard engine unless the database resides in the connecting user's home directory or a subdirectory.

Bug #117983

When the SECURITY property has been set to CONFIDENTIALITY and the server does not support CSM, the driver throws a "debug/tracejava not found" exception even when tracing is not turned on.

Bug #118150

Informix JDBC Driver may give erroneous results if the year, month, and day values are not given for DATETIME values that use YEAR, MONTH and DAY qualifiers.

Bug #118260

If an OUT parameter is not initialized by a setXXX() method before execution, an internal error is issued or the driver hangs. An error should be issued by the driver before execution.

Bug #118290

The following methods need to be updated to allow non-ANSI representations for situations where only HOUR TO SECOND formats are specified:

o IfxDateTime: toString(), fromString(), and isTime(TRUE)

o IfxChar: toTime(), fromTime()

o IfxVarchar: toTime(), fromTime()

Bug #118333

Using the ResultSet.updateString() method on a UDT in a scrollable updatable cursor gives the exception "Can't convert from string."

Bug #118537

Selection of VARCHAR columns gives an ArrayIndexOutOfBounds exception if the project list also includes variable length opaque or complex type fields.

Bug #118868

Informix JDBC Driver allocates memory for each column on a fetch for serialized data before translating data to Java objects. The driver should be using a tuple buffer instead of allocating new memory for each column, except when fetching complex types. Allocation for complex types is required because materialization can be is delayed.

Bug #119017

GLS internationalization Java error messages get garbled and do not print correctly for Japanese locales.

Bug #119054

The IfxDatabaseMetaData.getProcedureColumns() method always returns null.

Bug #119529

The ResultSet.insertRow() method causes a syntax error if the SQL statement has a semicolon (;) at the end.

Bug #120252

The DatabaseMetaData.GetCrossReference() method returns only one ResultSet with multiple keys.

Bug #120573

Closing a ResultSet may cause a "column sizes too large" error for a prepared statement being executed with different bind variables. This occurs when the ResultSet is closed after each iteration of a PreparedStatement loop.

Bug #120618

If the setObject() method is called using the SQLData interface for a named row, and the SQLData object is in a java.util.Collection object, error -9628 occurs.


Informix JDBC Driver
Version 2.11 , 02/01/00
Copyright © 2000, Informix Software, Inc. All rights reserved