Informix Online Documentation |
Date: 02/01/00
Version: 2.11
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.
Informix JDBC Driver 2.1 is compatible with the following database server versions:
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.
Before installing Informix JDBC Driver Version 2.1 on Solaris machines, make sure that the DISPLAY environment variable is set.
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.)
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."
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.
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
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.1The new features for release 2.1 of the Informix JDBC Driver are as follows:
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."
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.
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:
For example, if one thread executes the "Statement.executeQuery()" method on a Statement object, and another thread executes the "Statement.executeUpdate()" method on the same Statement object, the results of both methods are unexpected and depend on which method was executed last.
Similarly, if one thread executes the method ResultSet.next() and another thread executes the same method on the same ResultSet object, the results of both methods are unexpected and depend on which method was executed last.
If you connect to a non-GLS server, the behavior is the same as the JDBC driver 1.22 version.
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.
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 ProblemsThis 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.
The following sections describe the problems that have been fixed in this release.
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.
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.