Unsupported JDBC Features
The JDBC Driver is compliant with the JDBC 4.0 API specification. JDBC 4.0 API interfaces are fully supported with the following exceptions:
PooledConnection interface
The JDBC Driver does not support Statement pooling and does not implement the JDBC 4.0 methods addStatementEventListener() and RemoveStatementEventListener().
Calling stored procedures
JDBC Driver does not support escape syntax for calling stored procedures in Statement and PreparedStatement.
Auto-generated keys
If the table contains a system_maintained column, the Ingres DBMS returns only a single table key or a single object key per INSERT statement. Ingres does not return table and object keys for INSERT AS SELECT statements. Depending on the keys that are produced by the statement executed, auto-generated key parameters in execute(), executeUpdate(), and prepareStatement() methods are ignored and getGeneratedKeys() returns a result-set containing no rows, a single row with one column, or a single row with two columns. The JDBC Driver returns table and object keys as BINARY values.
If the table contains an identity column, getGeneratedKeys() retrieves the last generated identity value and returns it as a JDBC generated key. The query is issued if the following conditions are met:
• The application has requested generated keys be returned using the JDBC interface.
• No table or object key is returned by the statement.
If no identity value was generated in the session, a NULL value is returned.
Note: The SQL function last_identity() is used to obtain the generated identity value and it returns the last generated identity value for any SQL statement in the session; therefore, the identity value returned will be incorrect if the current SQL INSERT statement did not automatically generate an identity value.
We assume that table/object keys and identity columns are not mixed in the same table, or at least that access through generated keys for both is not needed.
Result sets
Result sets generated by executeQuery() requests are always CLOSE_CURSORS_AT_COMMIT (non-holdable).
The methods isBeforeFirst() and isLast() may return invalid information when used on a FORWARD-ONLY ResultSet. The method isBeforeFirst() cannot always detect that a ResultSet is empty when no call to next() has been made and may return true instead of returning false. The method isLast() cannot always detect when the ResultSet is positioned on the last row and may return false instead of returning true.
Data types
The JDBC data types DATALINK, ARRAY, REF, DISTINCT, STRUCT, and JAVA_OBJECT are not supported. The storage or mapping of Java objects (SQLInput, SQLOutput, and SQLData) is also not supported. Methods associated with these data types throw exceptions when called.
Calendars
Ingres stores date/time values in GMT (same as Java). With an Ingres DBMS, the JDBC Driver handles all date/time values in GMT and calendars provided in setXXX() and getXXX() methods are ignored. EDBC servers and Enterprise Access gateways do not reference date/time values to a particular time zone. The JDBC Driver uses the local time zone when accessing a non-Ingres DBMS Server, and utilizes calendars if provided. Calendars are also used for TIME WITHOUT TIME ZONE and TIMESTAMP WITHOUT TIME ZONE values.
Batch updates
If the DBMS does not support batch processing, batched execution for Statements, PreparedStatements, and CallableStatements is supported by individual execution of each batched request.