-
Notifications
You must be signed in to change notification settings - Fork 19
JDBC API
- Contents
-
JDBC API
- Summary
- Driver type
-
API support
-
java.sqlpackagejava.sql.Arrayinterface (optional)java.sql.Blobinterface (optional)java.sql.CallableStatementinterface (optional)java.sql.Clobinterface (optional)java.sql.Connectioninterfacejava.sql.DatabaseMetaDatainterfacejava.sql.Driverinterfacejava.sql.DriverActioninterface (optional)java.sql.NClobinterface (optional)java.sql.ParameterMetaDatainterfacejava.sql.PreparedStatementinterfacejava.sql.Refinterface (optional)java.sql.ResultSetinterfacejava.sql.ResultSetMetaDatainterfacejava.sql.RowIdinterface (optional)java.sql.Savepointinterface (optional)java.sql.SQLInputinterface (optional)java.sql.SQLOutputinterface (optional)java.sql.SQLXMLinterface (optional)java.sql.Statementinterfacejava.sql.Structinterface (optional)java.sql.Wrapperinterface
-
javax.sqlpackage (optional)
-
- Links
- Notes
The following things are known to have issues or are not supported yet:
- Date/time values are broken in tarantool.
- BLOBs are broken in tarantool.
- Large INTEGER values cannot be inserted (broken in tarantool too).
- No callable / prepared callable statements (optional).
- No escape syntax support.
- No batch execution.
- 75% of provided database metainfo is incorrect or not verified.
- Read-only connections (transactions?).
- No transaction and savepoint support.
- No In/Out parameters metadata provided for prepared and callable statements.
- No cursors (incremental fetch) support.
- ResultSet met info is not fully implemented.
- No UDT support.
- No multi results set is supported for statements.
This is not an exhaustive list.
The connector is Type-4 driver written in pure Java,
and uses a native network protocol to communicate with
Tarantool server.
See also:
- Chapter 9.1 in JDBC spec.
- Tarantool SQL Protocol.
NOTE: * optional interface, but if it's implemented then the implementation must support all methods required.
| Interface | Required | Supported | Covered | Details |
|---|---|---|---|---|
| Array* | 11/11 | 0/11 | 0/11 | #65; blocked |
| Blob* | 11/11 | 0/11 | 0/11 | #67 |
| CallableStatement* | 25/121 | 0/25 + 0/96 | 0/25 + 0/96 | #64 |
| Clob* | 13/13 | 0/13 | 0/13 | #66; blocked |
| Connection | 32/52 | 19/32 + 2/20 | 12/32 + 2/20 | |
| DatabaseMetaData | 176/176 | 52/176 | 20/176 | |
| Driver | 7/8 | 7/7 + 0/1 | 4/7 + 0/1 | |
| DriverAction* | 1/1 | 0/1 | 0/1 | #174 |
| NClob* | 13/13 | 0/13 | 0/13 | #68; blocked |
| ParameterMetaData | 9/9 | 0/9 | 0/9 | #173 |
| PreparedStatement | 34/58 | 27/34 + 4/24 | 12/34 + 0/24 | |
| Ref* | 4/4 | 0/4 | 0/4 | |
| ResultSet | 56/193 | 47/56 + 17/137 | 16/56 + 13/137 | |
| ResultSetMetaData | 21/21 | 3/21 | 3/21 | |
| RowId* | 4/4 | 0/4 | 0/4 | |
| Savepoint* | 2/2 | 0/2 | 0/2 | #177; blocked |
| SQLInput* | 19/28 | 0/19 + 0/9 | 0/19 + 0/9 | |
| SQLOutput* | 18/28 | 0/18 + 0/10 | 0/18 + 0/10 | |
| SQLXML* | 9/9 | 0/9 | 0/9 | #69; blocked |
| Statement | 37/50 | 17/37 + 0/13 | 12/38 + 0/13 | |
| Struct* | 3/3 | 0/3 | 0/3 | #70; blocked |
| Wrapper | 16/18 | 12/16 + 0/2 | 12/16 + 0/2 | #175 |
NOTE: All methods on the
Arrayinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| free() | Yes | No | No | |
| getArray() | Yes | No | No | |
| getArray(Map<String,Class<?>>) | Yes | No | No | |
| getArray(long, int) | Yes | No | No | |
| getArray(long, int, Map<String,Class<?>>) | Yes | No | No | |
| getBaseType() | Yes | No | No | |
| getBaseTypeName() | Yes | No | No | |
| getResultSet() | Yes | No | No | |
| getResultSet(Map<String,Class<?>>) | Yes | No | No | |
| getResultSet(long, int) | Yes | No | No | |
| getResultSet(long, int, Map<String,Class<?>>) | Yes | No | No |
NOTE: All methods on the
Blobinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| free() | Yes | No | No | No |
| getBinaryStream() | Yes | No | No | No |
| getBinaryStream(long, long) | Yes | No | No | No |
| getBytes(long, int) | Yes | No | No | No |
| length() | Yes | No | No | No |
| position(Blob, long) | Yes | No | No | No |
| position(byte[], long) | Yes | No | No | No |
| setBinaryStream(long) | Yes | No | No | No |
| setBytes(long, byte[]) | Yes | No | No | No |
| setBytes(long, byte[], int, int) | Yes | No | No | No |
| truncate(long) | Yes | No | No | No |
NOTE: It must implement the
CallableStatementinterface if the methodDatabaseMetaData.supportsStoredProcedures()returnstrue
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getArray(String) | No* | No | No | |
| getArray(int) | No* | No | No | |
| getBigDecimal(String) | No | No | No | |
| getBigDecimal(int) | Yes | No | No | |
| getBigDecimal(int, int) | No | No | No | |
| getBlob(String) | No* | No | No | |
| getBlob(int) | No* | No | No | |
| getBoolean(String) | No | No | No | |
| getBoolean(int) | Yes | No | No | |
| getByte(String) | No | No | No | |
| getByte(int) | Yes | No | No | |
| getBytes(String) | No | No | No | |
| getBytes(int) | Yes | No | No | |
| getCharacterStream(String) | No | No | No | |
| getCharacterStream(int) | Yes | No | No | |
| getClob(String) | No* | No | No | |
| getClob(int) | No* | No | No | |
| getDate(String) | No | No | No | |
| getDate(String, Calendar) | No | No | No | |
| getDate(int) | Yes | No | No | |
| getDate(int, Calendar) | Yes | No | No | |
| getDouble(String) | No | No | No | |
| getDouble(int) | Yes | No | No | |
| getFloat(String) | No | No | No | |
| getFloat(int) | Yes | No | No | |
| getInt(String) | No | No | No | |
| getInt(int) | Yes | No | No | |
| getLong(String) | No | No | No | |
| getLong(int) | Yes | No | No | |
| getNCharacterStream(String) | No* | No | No | |
| getNCharacterStream(int) | No* | No | No | |
| getNClob(String) | No* | No | No | |
| getNClob(int) | No* | No | No | |
| getNString(String) | No* | No | No | |
| getNString(int) | No* | No | No | |
| getObject(String) | No | No | No | |
| getObject(String, Class) | No | No | No | |
| getObject(String, Map<String,Class<?>>) | No | No | No | |
| getObject(int) | Yes | No | No | |
| getObject(int, Class) | No | No | No | |
| getObject(int, Map<String,Class<?>>) | No* | No | No | |
| getRef(String) | No* | No | No | |
| getRef(int) | No* | No | No | |
| getRowId(String) | No* | No | No | |
| getRowId(int) | No* | No | No | |
| getSQLXML(String) | No* | No | No | |
| getSQLXML(int) | No* | No | No | |
| getShort(String) | No | No | No | |
| getShort(int) | Yes | No | No | |
| getString(String) | No | No | No | |
| getString(int) | Yes | No | No | |
| getTime(String) | No | No | No | |
| getTime(String, Calendar) | No | No | No | |
| getTime(int) | Yes | No | No | |
| getTime(int, Calendar) | Yes | No | No | |
| getTimestamp(String) | No | No | No | |
| getTimestamp(String, Calendar) | No | No | No | |
| getTimestamp(int) | Yes | No | No | |
| getTimestamp(int, Calendar) | Yes | No | No | |
| getURL(String) | No* | No | No | |
| getURL(int) | No* | No | No | |
| registerOutParameter(String, int) | No | No | No | |
| registerOutParameter(String, int, String) | No* | No | No | |
| registerOutParameter(String, int, int) | No | No | No | |
| registerOutParameter(String, SQLType) | No | No | No | |
| registerOutParameter(String, SQLType, int) | No | No | No | |
| registerOutParameter(String, SQLType, String) | No | No | No | |
| registerOutParameter(int, int) | Yes | No | No | |
| registerOutParameter(int, int, String) | Yes | No | No | |
| registerOutParameter(int, int, int) | Yes | No | No | |
| registerOutParameter(int, SQLType) | Yes | No | No | |
| registerOutParameter(int, SQLType, int) | Yes | No | No | |
| registerOutParameter(int, SQLType, String) | Yes | No | No | |
| setAsciiStream(String, InputStream) | No | No | No | |
| setAsciiStream(String, InputStream, int) | No | No | No | |
| setAsciiStream(String, InputStream, long) | No | No | No | |
| setBigDecimal(String, BigDecimal) | No | No | No | |
| setBinaryStream(String, InputStream) | No | No | No | |
| setBinaryStream(String, InputStream, int) | No | No | No | |
| setBinaryStream(String, InputStream, long) | No | No | No | |
| setBlob(String, Blob) | No | No | No | |
| setBlob(String, InputStream) | No | No | No | |
| setBlob(String, InputStream, long) | No | No | No | |
| setBoolean(String, boolean) | No | No | No | |
| setByte(String, byte) | No | No | No | |
| setBytes(String, byte[]) | No | No | No | |
| setCharacterStream(String, Reader) | No | No | No | |
| setCharacterStream(String, Reader, int) | No | No | No | |
| setCharacterStream(String, Reader, long) | No | No | No | |
| setClob(String, Clob) | No | No | No | |
| setClob(String, Reader) | No | No | No | |
| setClob(String, Reader, long) | No | No | No | |
| setDate(String, Date) | No | No | No | |
| setDate(String, Date, Calendar) | No | No | No | |
| setDouble(String, double) | No | No | No | |
| setFloat(String, float) | No | No | No | |
| setInt(String, int) | No | No | No | |
| setLong(String, long) | No | No | No | |
| setNCharacterStream(String, Reader) | No | No | No | |
| setNCharacterStream(String, Reader, long) | No | No | No | |
| setNClob(String, NClob) | No | No | No | |
| setNClob(String, Reader) | No | No | No | |
| setNClob(String, Reader, long) | No | No | No | |
| setNString(String, String) | No | No | No | |
| setNull(String, int) | No | No | No | |
| setNull(String, int, String) | No* | No | No | |
| setObject(String, Object) | No | No | No | |
| setObject(String, Object, int) | No | No | No | |
| setObject(String, Object, int, int) | No | No | No | |
| setObject(String, Object, SQLType) | No | No | No | |
| setObject(String, Object, SQLType, int) | No | No | No | |
| setRowId(String, RowId) | No | No | No | |
| setSQLXML(String, SQLXML) | No | No | No | |
| setShort(String, short) | No | No | No | |
| setString(String, String) | No | No | No | |
| setTime(String, Time) | No | No | No | |
| setTime(String, Time, Calendar) | No | No | No | |
| setTimestamp(String, Timestamp) | No | No | No | |
| setTimestamp(String, Timestamp, Calendar) | No | No | No | |
| setURL(String, URL) | No | No | No | |
| wasNull() | Yes | No | No |
NOTE: All methods on the
Clobinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| free() | Yes | No | No | |
| getAsciiStream() | Yes | No | No | |
| getCharacterStream() | Yes | No | No | |
| getCharacterStream(long, length) | Yes | No | No | |
| getSubString(long, int) | Yes | No | No | |
| length() | Yes | No | No | |
| position(Clob, long) | Yes | No | No | |
| position(String, long) | Yes | No | No | |
| setAsciiStream(long) | Yes | No | No | |
| setCharacterStream(long) | Yes | No | No | |
| setString(long, String) | Yes | No | No | |
| setString(long, String, int, int) | Yes | No | No | |
| truncate(long) | Yes | No | No |
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
NOTE: ** is not required to implement
prepareStatement(String sql, Statement.RETURN_GENERATED_KEYS)unless the driver supports generated keys.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| abort(Executor) | Yes | No | No | #71 |
| clearWarnings() | Yes | Yes | No | dumb, but enough |
| close() | Yes | Yes | Yes | |
| commit() | Yes | No | No | #63; blocked |
| createArrayOf(String, Object[]) | No* | No | No | #65; blocked |
| createBlob() | No* | No | No | #67 |
| createClob() | No* | No | No | #66; blocked |
| createNClob() | No* | No | No | #66; blocked |
| createSQLXML() | No* | No | No | #69; blocked |
| createStatement() | Yes | Yes | Yes | |
| createStatement(int, int) | Yes | Yes | Yes | |
| createStatement(int, int, int) | Yes | Yes | Yes | |
| createStruct(String, Object[]) | No* | No | No | #70; blocked |
| getAutoCommit() | Yes | No | No | #63; blocked |
| getCatalog() | Yes | Yes | No | dumb, but enough |
| getClientInfo() | Yes | No | No | #74 |
| getClientInfo(String) | Yes | No | No | #74 |
| getHoldability() | Yes | Yes | Yes | |
| getMetaData() | Yes | Yes | Yes | |
| getNetworkTimeout() | No | Yes | Yes | |
| getSchema() | Yes | Yes | No | dumb, but enough |
| getTransactionIsolation() | Yes | No | No | #103; blocked |
| getTypeMap() | No* | No | No | |
| getWarnings() | Yes | Yes | No | dumb, but enough |
| isClosed() | Yes | Yes | Yes | |
| isReadOnly() | Yes | Yes | No | dumb, #176 |
| isValid(int) | Yes | Yes | Yes | w/o timeout |
| nativeSQL(String) | Yes | No | No | #76 |
| prepareCall(String) | No | No | No | |
| prepareCall(String, int, int) | No | No | No | |
| prepareCall(String, int, int, int) | No | No | No | |
| prepareStatement(String) | Yes | Yes | Yes | |
| prepareStatement(String, String[]) | No | No | No | #77; blocked |
| prepareStatement(String, int[]) | No | No | No | #77; blocked |
| prepareStatement(String, int) | No** | No | No | #77; blocked |
| prepareStatement(String, int, int) | Yes | Yes | Yes | |
| prepareStatement(String, int, int, int) | Yes | Yes | Yes | |
| releaseSavepoint(Savepoint) | No | No | No | #177 |
| rollback() | Yes | No | No | #63; blocked |
| rollback(Savepoint) | No | No | No | #177 |
| setAutoCommit(boolean) | Yes | No | No | #63; blocked |
| setCatalog(String) | Yes | Yes | No | dumb, but enough |
| setClientInfo(Properties) | Yes | No | No | #74 |
| setClientInfo(String, String) | Yes | No | No | #74 |
| setHoldability(int) | Yes | Yes | Yes | HOLD_CURSORS_OVER_COMMIT only |
| setNetworkTimeout(Executor, int) | No | Yes | Yes | |
| setReadOnly(boolean) | Yes | No | No | #176 |
| setSavepoint() | No | No | No | #177 |
| setSavepoint(String) | No | No | No | #177 |
| setSchema(String) | Yes | Yes | No | dumb, but enough |
| setTransactionIsolation(int) | Yes | No | No | #103; blocked |
| setTypeMap(Map<String,Class<?>>) | No | No | No |
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| allProceduresAreCallable() | Yes | No | No | #110 |
| allTablesAreSelectable() | Yes | No | No | #110 |
| autoCommitFailureClosesAllResultSets() | Yes | No | No | #112 |
| dataDefinitionCausesTransactionCommit() | Yes | No | No | #112 |
| dataDefinitionIgnoredInTransactions() | Yes | No | No | #112 |
| deletesAreDetected(int) | Yes | Yes | Yes | |
| doesMaxRowSizeIncludeBlobs() | Yes | No | No | #109 |
| generatedKeyAlwaysReturned() | Yes | No | No | #112 |
| getAttributes(String, String, String, String) | Yes | Yes | No | dumb, but enough (until we'll add UDTs) |
| getBestRowIdentifier(String, String, String, int, boolean) | Yes | No | No | #114 |
| getCatalogSeparator() | Yes | Yes | No | |
| getCatalogTerm() | Yes | Yes | No | |
| getCatalogs() | Yes | No | No | #105 |
| getClientInfoProperties() | Yes | No | No | #74 |
| getColumnPrivileges(String, String, String, String) | Yes | No | No | #115 |
| getColumns(String, String, String, String) | Yes | Yes | Yes | |
| getConnection() | Yes | Yes | No | |
| getCrossReference(String x 6) | Yes | No | No | #116 |
| getDatabaseMajorVersion() | Yes | No | No | #106 |
| getDatabaseMinorVersion() | Yes | No | No | #106 |
| getDatabaseProductName() | Yes | Yes | No | #106 |
| getDatabaseProductVersion() | Yes | Yes | No | #106 |
| getDefaultTransactionIsolation() | Yes | No | No | #103; blocked |
| getDriverMajorVersion() | Yes | Yes | No | |
| getDriverMinorVersion() | Yes | Yes | No | |
| getDriverName() | Yes | Yes | No | |
| getDriverVersion() | Yes | Yes | No | |
| getExportedKeys(String, String, String) | Yes | No | No | #116 |
| getExtraNameCharacters() | Yes | No | No | #105 |
| getFunctionColumns(String, String, String, String) | Yes | No | No | #118 |
| getFunctions(String, String, String) | Yes | No | No | #104 |
| getIdentifierQuoteString() | Yes | No | No | #105 |
| getImportedKeys(String, String, String) | Yes | No | No | #116 |
| getIndexInfo(String, String, String, boolean, boolean) | Yes | No | No | #117 |
| getJDBCMajorVersion() | Yes | Yes | No | #106 |
| getJDBCMinorVersion() | Yes | Yes | No | #106 |
| getMaxBinaryLiteralLength() | Yes | No | No | #105 |
| getMaxCatalogNameLength() | Yes | No | No | #105 |
| getMaxCharLiteralLength() | Yes | No | No | #105 |
| getMaxColumnNameLength() | Yes | No | No | #105 |
| getMaxColumnsInGroupBy() | Yes | No | No | #109 |
| getMaxColumnsInIndex() | Yes | No | No | #109 |
| getMaxColumnsInOrderBy() | Yes | No | No | #109 |
| getMaxColumnsInSelect() | Yes | No | No | #109 |
| getMaxColumnsInTable() | Yes | No | No | #109 |
| getMaxConnections() | Yes | No | No | #109 |
| getMaxCursorNameLength() | Yes | No | No | #105 |
| getMaxIndexLength() | Yes | No | No | #105 |
| getMaxLogicalLobSize() | Yes | No | No | #109 |
| getMaxProcedureNameLength() | Yes | No | No | #105 |
| getMaxRowSize() | Yes | No | No | #109 |
| getMaxSchemaNameLength() | Yes | No | No | #105 |
| getMaxStatementLength() | Yes | No | No | #105 |
| getMaxStatements() | Yes | No | No | #109 |
| getMaxTableNameLength() | Yes | No | No | #105 |
| getMaxTablesInSelect() | Yes | No | No | #109 |
| getMaxUserNameLength() | Yes | No | No | #105 |
| getNumericFunctions() | Yes | No | No | #82 |
| getPrimaryKeys(String, String, String) | Yes | Yes | Yes | |
| getProcedureColumns(String, String, String, String) | Yes | No | No | #118 |
| getProcedureTerm() | Yes | No | No | #104 |
| getProcedures(String, String, String) | Yes | No | No | #105 |
| getPseudoColumns(String, String, String, String) | Yes | Yes | No | dumb, but enough |
| getResultSetHoldability() | Yes | Yes | Yes | |
| getRowIdLifetime() | Yes | Yes | No | |
| getSQLKeywords()() | Yes | Yes | No | |
| getSQLStateType() | Yes | Yes | No | |
| getSchemaTerm() | Yes | No | No | #105 |
| getSchemas() | Yes | No | No | #105 |
| getSchemas(String, String) | Yes | No | No | #105 |
| getSearchStringEscape() | Yes | No | No | #119 |
| getStringFunctions() | Yes | No | No | #82 |
| getSuperTables(String, String, String) | Yes | Yes | No | dumb, but enough (until we'll add structured types) |
| getSuperTypes(String, String, String) | Yes | Yes | No | dumb, but enough (until we'll add structured types) |
| getSystemFunctions() | Yes | No | No | #82 |
| getTablePrivileges(String, String, String) | Yes | No | No | #115 |
| getTableTypes() | Yes | Yes | Yes | |
| getTables(String, String, String, String[]) | Yes | No | No | #107 |
| getTimeDateFunctions() | Yes | No | No | #82 |
| getTypeInfo() | Yes | No | No | #113 |
| getUDTs(String, String, String, int[]) | Yes | Yes | No | dumb, but enough |
| getURL() | Yes | Yes | No | |
| getUserName() | Yes | Yes | No | |
| getVersionColumns(String, String, String) | Yes | Yes | No | |
| insertsAreDetected(int) | Yes | Yes | Yes | |
| isCatalogAtStart() | Yes | Yes | No | |
| isReadOnly() | Yes | Yes | No | dumb, but enough |
| locatorsUpdateCopy() | Yes | Yes | No | |
| nullPlusNonNullIsNull() | Yes | Yes | No | |
| nullsAreSortedAtEnd() | Yes | Yes | Yes | |
| nullsAreSortedAtStart() | Yes | Yes | Yes | |
| nullsAreSortedHigh() | Yes | Yes | Yes | |
| nullsAreSortedLow() | Yes | Yes | Yes | |
| othersDeletesAreVisible(int) | Yes | Yes | Yes | |
| othersInsertsAreVisible(int) | Yes | Yes | Yes | |
| othersUpdatesAreVisible(int) | Yes | Yes | Yes | |
| ownDeletesAreVisible(int) | Yes | Yes | Yes | |
| ownInsertsAreVisible(int) | Yes | Yes | Yes | |
| ownUpdatesAreVisible(int) | Yes | Yes | Yes | |
| storesLowerCaseIdentifiers() | Yes | Yes | No | #105 |
| storesLowerCaseQuotedIdentifiers() | Yes | Yes | No | #105 |
| storesMixedCaseIdentifiers() | Yes | No | No | #105 |
| storesMixedCaseQuotedIdentifiers() | Yes | Yes | No | #105 |
| storesUpperCaseIdentifiers() | Yes | No | No | #105 |
| storesUpperCaseQuotedIdentifiers() | Yes | Yes | No | #105 |
| supportsANSI92EntryLevelSQL() | Yes | No | No | #108 |
| supportsANSI92FullSQL() | Yes | No | No | #108 |
| supportsANSI92IntermediateSQL() | Yes | No | No | #108 |
| supportsAlterTableWithAddColumn() | Yes | No | No | #108 |
| supportsAlterTableWithDropColumn() | Yes | No | No | #108 |
| supportsBatchUpdates() | Yes | No | No | #108 |
| supportsCatalogsInDataManipulation() | Yes | No | No | #108 |
| supportsCatalogsInIndexDefinitions() | Yes | No | No | #108 |
| supportsCatalogsInPrivilegeDefinitions() | Yes | No | No | #108 |
| supportsCatalogsInProcedureCalls() | Yes | No | No | #108 |
| supportsCatalogsInTableDefinitions() | Yes | No | No | #108 |
| supportsColumnAliasing() | Yes | No | No | #108 |
| supportsConvert() | Yes | No | No | #108 |
| supportsConvert(int fromType, int toType) | Yes | No | No | #108 |
| supportsCoreSQLGrammar() | Yes | No | No | #108 |
| supportsCorrelatedSubqueries() | Yes | No | No | #108 |
| supportsDataDefinitionAndDataManipulationTransactions() | Yes | No | No | #108 |
| supportsDataManipulationTransactionsOnly() | Yes | No | No | #108 |
| supportsDifferentTableCorrelationNames() | Yes | No | No | #108 |
| supportsExpressionsInOrderBy() | Yes | No | No | #108 |
| supportsExtendedSQLGrammar() | Yes | No | No | #108 |
| supportsFullOuterJoins() | Yes | No | No | #108 |
| supportsGetGeneratedKeys() | Yes | No | No | #108 |
| supportsGroupBy() | Yes | No | No | #108 |
| supportsGroupByBeyondSelect() | Yes | No | No | #108 |
| supportsGroupByUnrelated() | Yes | No | No | #108 |
| supportsIntegrityEnhancementFacility() | Yes | No | No | #108 |
| supportsLikeEscapeClause() | Yes | No | No | #108 |
| supportsLimitedOuterJoins() | Yes | No | No | #108 |
| supportsMinimumSQLGrammar() | Yes | No | No | #108 |
| supportsMixedCaseIdentifiers() | Yes | No | No | #105 + #108 |
| supportsMixedCaseQuotedIdentifiers() | Yes | No | No | #105 + #108 |
| supportsMultipleOpenResults() | Yes | No | No | #108 |
| supportsMultipleResultSets() | Yes | No | No | #108 |
| supportsMultipleTransactions() | Yes | No | No | #108 |
| supportsNamedParameters() | Yes | No | No | #108 |
| supportsNonNullableColumns() | Yes | No | No | #108 |
| supportsOpenCursorsAcrossCommit() | Yes | No | No | #108 |
| supportsOpenCursorsAcrossRollback() | Yes | No | No | #108 |
| supportsOpenStatementsAcrossCommit() | Yes | No | No | #108 |
| supportsOpenStatementsAcrossRollback() | Yes | No | No | #108 |
| supportsOrderByUnrelated() | Yes | No | No | #108 |
| supportsOuterJoins() | Yes | No | No | #108 |
| supportsPositionedDelete() | Yes | No | No | #108 |
| supportsPositionedUpdate() | Yes | No | No | #108 |
| supportsRefCursors() | Yes | No | No | #108 |
| supportsResultSetConcurrency(int, int) | Yes | Yes | Yes | |
| supportsResultSetHoldability(int) | Yes | Yes | Yes | |
| supportsResultSetType(int) | Yes | Yes | Yes | |
| supportsSavepoints() | Yes | No | No | #108 |
| supportsSchemasInDataManipulation() | Yes | No | No | #108 |
| supportsSchemasInIndexDefinitions() | Yes | No | No | #108 |
| supportsSchemasInPrivilegeDefinitions() | Yes | No | No | #108 |
| supportsSchemasInProcedureCalls() | Yes | No | No | #108 |
| supportsSchemasInTableDefinitions() | Yes | No | No | #108 |
| supportsSelectForUpdate() | Yes | No | No | #108 |
| supportsStatementPooling() | Yes | No | No | #108 |
| supportsStoredFunctionsUsingCallSyntax() | Yes | No | No | #82 + #108 |
| supportsStoredProcedures() | Yes | No | No | #82 + #108 |
| supportsSubqueriesInComparisons() | Yes | No | No | #108 |
| supportsSubqueriesInExists() | Yes | No | No | #108 |
| supportsSubqueriesInIns() | Yes | No | No | #108 |
| supportsSubqueriesInQuantifieds() | Yes | No | No | #108 |
| supportsTableCorrelationNames() | Yes | No | No | #108 |
| supportsTransactionIsolationLevel(int) | Yes | No | No | #108 |
| supportsTransactions() | Yes | No | No | #108 |
| supportsUnion() | Yes | No | No | #108 |
| supportsUnionAll() | Yes | No | No | #108 |
| updatesAreDetected(int) | Yes | Yes | Yes | |
| usesLocalFilePerTable() | Yes | Yes | No | |
| usesLocalFiles() | Yes | Yes | No |
NOTE: * implementation must contain a static initializer that will be called when the driver is loaded and automatically register an instance of the driver.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| static { } | Yes* | Yes | Yes | |
| acceptsURL(String) | Yes | Yes | No | |
| connect(String, Properties) | Yes | Yes | Yes | |
| getMajorVersion() | Yes | Yes | No | dumb |
| getMinorVersion() | Yes | Yes | No | dumb |
| getParentLogger() | No | No | No | |
| getPropertyInfo(String, Properties) | Yes | Yes | Yes | |
| jdbcCompliant() | Yes | Yes | Yes | false |
NOTE: All methods on the
DriverActioninterface must be fully implemented if the JDBC driver supports driver notifications.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| deregister() | Yes | No | No |
NOTE: All methods on the
NClobinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| free() | Yes | No | No | |
| getAsciiStream() | Yes | No | No | |
| getCharacterStream() | Yes | No | No | |
| getCharacterStream(long, length) | Yes | No | No | |
| getSubString(long, int) | Yes | No | No | |
| length() | Yes | No | No | |
| position(Clob, long) | Yes | No | No | |
| position(String, long) | Yes | No | No | |
| setAsciiStream(long) | Yes | No | No | |
| setCharacterStream(long) | Yes | No | No | |
| setString(long, String) | Yes | No | No | |
| setString(long, String, int, int) | Yes | No | No | |
| truncate(long) | Yes | No | No |
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getParameterClassName(int) | Yes | No | No | |
| getParameterCount() | Yes | No | No | |
| getParameterMode(int) | Yes | No | No | |
| getParameterType(int) | Yes | No | No | |
| getParameterTypeName(int) | Yes | No | No | |
| getPrecision(int) | Yes | No | No | |
| getScale(int) | Yes | No | No | |
| isNullable(int) | Yes | No | No | |
| isSigned(int) | Yes | No | No |
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| addBatch() | Yes | No | No | #62 |
| clearParameters() | Yes | Yes | No | |
| execute() | Yes | Yes | Yes | |
| executeQuery() | Yes | Yes | Yes | |
| executeLargeUpdate() | No | No | No | |
| executeUpdate() | Yes | Yes | Yes | |
| getMetaData() | No | Yes | No | |
| getParameterMetaData() | Yes | No | No | #173 |
| setArray(int, Array) | No* | No | No | |
| setAsciiStream(int, InputStream) | No | No | No | |
| setAsciiStream(int, InputStream, int) | Yes | Yes | No | length is ignored |
| setAsciiStream(int, InputStream, long) | Yes | No | No | |
| setBigDecimal(int, BigDecimal) | Yes | Yes | Yes | |
| setBinaryStream(int, InputStream) | No | No | No | |
| setBinaryStream(int, InputStream, int) | Yes | Yes | No | length is ignored |
| setBinaryStream(int, InputStream, long) | Yes | No | No | |
| setBlob(int, Blob) | No* | No | No | |
| setBlob(int, InputStream) | No* | No | No | |
| setBlob(int, InputStream, long) | No* | No | No | |
| setBoolean(int, boolean) | Yes | Yes | No | |
| setByte(int, byte) | Yes | Yes | Yes | |
| setBytes(int, byte[]) | Yes | Yes | Yes | |
| setCharacterStream(int, Reader) | No | No | No | |
| setCharacterStream(int, Reader, int) | Yes | No | No | |
| setCharacterStream(int, Reader, long) | Yes | No | No | |
| setClob(int, Clob) | No* | No | No | |
| setClob(int, Reader) | No* | No | No | |
| setClob(int, Reader, long) | No* | No | No | |
| setDate(int, Date) | Yes | Yes | Yes | |
| setDate(int, Date, Calendar) | Yes | Yes | No | calendar is ignored |
| setDouble(int, double) | Yes | Yes | Yes | |
| setFloat(int, float) | Yes | Yes | Yes | |
| setInt(int, int) | Yes | Yes | Yes | |
| setLong(int, long) | Yes | Yes | Yes | |
| setNCharacterStream(int, Reader) | No* | No | No | |
| setNCharacterStream(int, Reader, long) | No* | No | No | |
| setNClob(int, NClob) | No* | No | No | |
| setNClob(int, Reader) | No* | No | No | |
| setNClob(int, Reader, long) | No* | No | No | |
| setNString(int, String) | No* | Yes | No | encoding is ignored |
| setNull(int, int) | Yes | Yes | No | |
| setNull(int, int, String) | No* | Yes | No | |
| setObject(int, Object) | Yes | Yes | No | |
| setObject(int, Object, SQLType) | Yes | No | No | |
| setObject(int, Object, SQLType, int) | Yes | No | No | |
| setObject(int, Object, int) | Yes | Yes | No | type is ignored |
| setObject(int, Object, int, int) | Yes | Yes | No | length is ignored |
| setRef(int, Ref) | No* | No | No | |
| setRowId(int, RowId) | No* | No | No | |
| setSQLXML(int, SQLXMLmlObject) | No* | No | No | |
| setShort(int, short) | Yes | Yes | No | |
| setString(int, String) | Yes | Yes | Yes | |
| setTime(int, Time) | Yes | Yes | No | |
| setTime(int, Time, Calendar) | Yes | Yes | No | calendar is ignored |
| setTimestamp(int, Timestamp) | Yes | Yes | No | |
| setTimestamp(int, Timestamp, Calendar) | Yes | Yes | No | calendar is ignored |
| setURL(int, URL) | No* | Yes | No | |
| setUnicodeStream(int, InputStream, int) | No | Yes | No | length is ignored |
NOTE: All methods on the
Refinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getBaseTypeName() | Yes | No | No | |
| getObject() | Yes | No | No | |
| getObject(Map<String,Class<?>>) | Yes | No | No | |
| setObject(Object) | Yes | No | No |
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
NOTE: ** is not required to implement the methods unless driver supports a
ResultSetconcurrency ofCONCUR_UPDATABLE
NOTE: *** is not required to implement the methods unless driver supports a
ResultSettype ofTYPE_SCROLL_SENSITIVEorTYPE_SCROLL_INSENSITIVE
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| absolute(int) | No*** | Yes | Yes | |
| afterLast() | No*** | Yes | Yes | |
| beforeFirst() | No*** | Yes | Yes | |
| cancelRowUpdates() | No** | No | No | |
| clearWarnings() | Yes | Yes | No | dumb |
| close() | Yes | Yes | Yes | |
| deleteRow() | No** | No | No | |
| findColumn(String) | Yes | Yes | Yes | |
| first() | No*** | Yes | Yes | |
| getArray(String) | No* | No | No | |
| getArray(int) | No* | No | No | |
| getAsciiStream(String) | Yes | Yes | No | |
| getAsciiStream(int) | Yes | Yes | No | |
| getBigDecimal(String) | Yes | Yes | Yes | |
| getBigDecimal(String, int) | No | Yes | Yes | |
| getBigDecimal(int) | Yes | Yes | Yes | |
| getBigDecimal(int, int) | No | Yes | Yes | |
| getBinaryStream(String) | Yes | Yes | No | |
| getBinaryStream(int) | Yes | Yes | No | |
| getBlob(String) | No* | No | No | |
| getBlob(int) | No* | No | No | |
| getBoolean(String) | Yes | Yes | No | |
| getBoolean(int) | Yes | Yes | No | |
| getByte(String) | Yes | Yes | Yes | |
| getByte(int) | Yes | Yes | Yes | |
| getBytes(String) | Yes | Yes | Yes | |
| getBytes(int) | Yes | Yes | Yes | |
| getCharacterStream(String) | Yes | Yes | No | |
| getCharacterStream(int) | Yes | Yes | No | |
| getClob(String) | No* | No | No | |
| getClob(int) | No* | No | No | |
| getConcurrency() | Yes | Yes | Yes | |
| getCursorName() | No | No | No | |
| getDate(String) | Yes | Yes | Yes | |
| getDate(String, Calendar) | Yes | No | No | #91; blocked |
| getDate(int) | Yes | Yes | Yes | |
| getDate(int, Calendar) | Yes | No | No | #91; blocked |
| getDouble(String) | Yes | Yes | Yes | |
| getDouble(int) | Yes | Yes | Yes | |
| getFetchDirection() | Yes | Yes | No | FETCH_FORWARD only |
| getFetchSize() | Yes | No | No | #178 |
| getFloat(String) | Yes | Yes | Yes | |
| getFloat(int) | Yes | Yes | Yes | |
| getHoldability() | Yes | Yes | Yes | |
| getInt(String) | Yes | Yes | Yes | |
| getInt(int) | Yes | Yes | Yes | |
| getLong(String) | Yes | Yes | Yes | |
| getLong(int) | Yes | Yes | Yes | |
| getMetaData() | Yes | Yes | Yes | |
| getNCharacterStream(String) | No* | No | No | |
| getNCharacterStream(int) | No* | No | No | |
| getNClob(String) | No* | No | No | |
| getNClob(int) | No* | No | No | |
| getNString(String) | No* | No | No | |
| getNString(int) | No* | No | No | |
| getObject(String) | Yes | Yes | No | |
| getObject(String, Class) | No | No | No | wrong cast |
| getObject(String, Map<String,Class<?>>) | No* | No | No | |
| getObject(int) | Yes | Yes | No | |
| getObject(int, Class type) | No | No | No | wrong cast |
| getObject(int, Map<String,Class<?>>) | No* | No | No | |
| getRef(String) | No* | No | No | |
| getRef(int) | No* | No | No | |
| getRow() | No | Yes | Yes | |
| getRowId(String) | No* | No | No | |
| getRowId(int) | No* | No | No | |
| getSQLXML(String) | No* | No | No | |
| getSQLXML(int) | No* | No | No | |
| getShort(String) | Yes | Yes | Yes | |
| getShort(int) | Yes | Yes | Yes | |
| getStatement() | Yes | Yes | Yes | |
| getString(String) | Yes | Yes | Yes | |
| getString(int) | Yes | Yes | Yes | |
| getTime(String) | Yes | Yes | No | |
| getTime(String, Calendar) | Yes | No | No | #91; blocked |
| getTime(int) | Yes | Yes | No | |
| getTime(int, Calendar) | Yes | No | No | #91; blocked |
| getTimestamp(String) | Yes | Yes | No | |
| getTimestamp(String, Calendar) | Yes | No | No | #91; blocked |
| getTimestamp(int) | Yes | Yes | No | |
| getTimestamp(int, Calendar) | Yes | No | No | #91; blocked |
| getType() | Yes | Yes | Yes | |
| getURL(String) | No* | Yes | No | |
| getURL(int) | No* | Yes | No | |
| getUnicodeStream(String) | No | Yes | No | |
| getUnicodeStream(int) | No | Yes | No | |
| getWarnings() | Yes | Yes | No | dumb |
| insertRow() | No | No | No | |
| isAfterLast() | No*** | Yes | Yes | |
| isBeforeFirst() | No*** | Yes | Yes | |
| isClosed() | Yes | Yes | Yes | |
| isFirst() | No*** | Yes | Yes | |
| isLast() | No*** | Yes | Yes | |
| last() | No*** | Yes | Yes | |
| moveToCurrentRow() | No | No | No | |
| moveToInsertRow() | No | No | No | |
| next() | Yes | Yes | Yes | |
| previous() | No*** | Yes | Yes | |
| refreshRow() | No | No | No | |
| relative(int) | No*** | No | No | |
| rowDeleted() | No** | No | No | |
| rowInserted() | No | No | No | |
| rowUpdated() | No** | No | No | |
| setFetchDirection(int) | Yes | Yes | No | FETCH_FORWARD only |
| setFetchSize(int) | Yes | No | No | #178 |
| updateArray(String, Array) | No** | No | No | |
| updateArray(int, Array) | No** | No | No | |
| updateAsciiStream(String, InputStream) | No** | No | No | |
| updateAsciiStream(String, InputStream, int) | No** | No | No | |
| updateAsciiStream(String, InputStream, long) | No** | No | No | |
| updateAsciiStream(int, InputStream) | No** | No | No | |
| updateAsciiStream(int, InputStream, int) | No** | No | No | |
| updateAsciiStream(int, InputStream, long) | No** | No | No | |
| updateBigDecimal(String, BigDecimal) | No** | No | No | |
| updateBigDecimal(int, BigDecimal) | No** | No | No | |
| updateBinaryStream(String, InputStream) | No** | No | No | |
| updateBinaryStream(String, InputStream, int) | No** | No | No | |
| updateBinaryStream(String, InputStream, long) | No** | No | No | |
| updateBinaryStream(int, InputStream) | No** | No | No | |
| updateBinaryStream(int, InputStream, int) | No** | No | No | |
| updateBinaryStream(int, InputStream, long) | No** | No | No | |
| updateBlob(String, Blob) | No** | No | No | |
| updateBlob(String, InputStream) | No** | No | No | |
| updateBlob(String, InputStream, long) | No** | No | No | |
| updateBlob(int, Blob) | No** | No | No | |
| updateBlob(int, InputStream) | No** | No | No | |
| updateBlob(int, InputStream, long) | No** | No | No | |
| updateBoolean(String, boolean) | No** | No | No | |
| updateBoolean(int, boolean) | No** | No | No | |
| updateByte(String, byte) | No** | No | No | |
| updateByte(int, byte) | No** | No | No | |
| updateBytes(String, byte[]) | No** | No | No | |
| updateBytes(int, byte[]) | No** | No | No | |
| updateCharacterStream(String, Reader) | No** | No | No | |
| updateCharacterStream(String, Reader, int) | No** | No | No | |
| updateCharacterStream(String, Reader, long) | No** | No | No | |
| updateCharacterStream(int, Reader) | No** | No | No | |
| updateCharacterStream(int, Reader, int) | No** | No | No | |
| updateCharacterStream(int, Reader, long) | No** | No | No | |
| updateClob(String, Clob) | No** | No | No | |
| updateClob(String, Reader) | No** | No | No | |
| updateClob(String, Reader, long) | No** | No | No | |
| updateClob(int, Clob) | No** | No | No | |
| updateClob(int, Reader) | No** | No | No | |
| updateClob(int, Reader, long) | No** | No | No | |
| updateDate(String, Date) | No** | No | No | |
| updateDate(int, Date) | No** | No | No | |
| updateDouble(String, double) | No** | No | No | |
| updateDouble(int, double) | No** | No | No | |
| updateFloat(String, float) | No** | No | No | |
| updateFloat(int, float) | No** | No | No | |
| updateInt(String, int) | No** | No | No | |
| updateInt(int, int) | No** | No | No | |
| updateLong(String, long) | No** | No | No | |
| updateLong(int, long) | No** | No | No | |
| updateNCharacterStream(String, Reader) | No** | No | No | |
| updateNCharacterStream(String, Reader, long) | No** | No | No | |
| updateNCharacterStream(int, Reader) | No** | No | No | |
| updateNCharacterStream(int, Reader, long) | No** | No | No | |
| updateNClob(String, NClob) | No** | No | No | |
| updateNClob(String, Reader) | No** | No | No | |
| updateNClob(String, Reader, long) | No** | No | No | |
| updateNClob(int, NClob) | No** | No | No | |
| updateNClob(int, Reader) | No** | No | No | |
| updateNClob(int, Reader, long) | No** | No | No | |
| updateNString(String, String) | No** | No | No | |
| updateNString(int, String) | No** | No | No | |
| updateNull(String) | No** | No | No | |
| updateNull(int) | No** | No | No | |
| updateObject(String, Object) | No** | No | No | |
| updateObject(String, Object, SQLType) | No** | No | No | |
| updateObject(String, Object, SQLType, int) | No** | No | No | |
| updateObject(String, Object, int) | No** | No | No | |
| updateObject(int, Object) | No** | No | No | |
| updateObject(int, Object, SQLType) | No** | No | No | |
| updateObject(int, Object, SQLType, int) | No** | No | No | |
| updateObject(int, Object, int) | No** | No | No | |
| updateRef(String, Ref) | No** | No | No | |
| updateRef(int, Ref) | No** | No | No | |
| updateRow() | No** | No | No | |
| updateRowId(String, RowId) | No** | No | No | |
| updateRowId(int, RowId) | No** | No | No | |
| updateSQLXML(String, SQLXMLmlObject) | No** | No | No | |
| updateSQLXML(int, SQLXMLmlObject) | No** | No | No | |
| updateShort(String, short) | No** | No | No | |
| updateShort(int, short) | No** | No | No | |
| updateString(String, String) | No** | No | No | |
| updateString(int, String) | No** | No | No | |
| updateTime(String, Time) | No** | No | No | |
| updateTime(int, Time) | No** | No | No | |
| updateTimestamp(String, Timestamp) | No** | No | No | |
| updateTimestamp(int, Timestamp) | No** | No | No | |
| wasNull() | Yes | No | No | #179 |
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getCatalogName(int) | Yes | No | No | |
| getColumnClassName(int) | Yes | No | No | |
| getColumnCount() | Yes | Yes | Yes | |
| getColumnDisplaySize(int) | Yes | No | No | |
| getColumnLabel(int) | Yes | Yes | Yes | |
| getColumnName(int) | Yes | Yes | Yes | |
| getColumnType(int) | Yes | No | No | |
| getColumnTypeName(int) | Yes | No | No | |
| getPrecision(int) | Yes | No | No | |
| getScale(int) | Yes | No | No | |
| getSchemaName(int) | Yes | No | No | |
| getTableName(int) | Yes | No | No | |
| isAutoIncrement(int) | Yes | No | No | |
| isCaseSensitive(int) | Yes | No | No | |
| isCurrency(int) | Yes | No | No | |
| isDefinitelyWritable(int) | Yes | No | No | |
| isNullable(int) | Yes | No | No | |
| isReadOnly(int) | Yes | No | No | |
| isSearchable(int) | Yes | No | No | |
| isSigned(int) | Yes | No | No | |
| isWritable(int) | Yes | No | No |
NOTE: All methods on the
RowIdinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| equals(Object) | Yes | No | No | |
| getBytes() | Yes | No | No | |
| hashCode() | Yes | No | No | |
| toString() | Yes | No | No |
NOTE: It must implement the
Savepointinterface if the methodDatabaseMetaData.supportsSavepoints()returnstrue
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getSavepointId() | Yes | No | No | |
| getSavepointName() | Yes | No | No |
SQLInputis optional interface, but if it's implemented then the implementation must support all methods with the exception of optional methods marked*.
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| readArray() | No* | No | No | |
| readAsciiStream() | Yes | No | No | |
| readBigDecimal() | Yes | No | No | |
| readBinaryStream() | Yes | No | No | |
| readBlob() | No* | No | No | |
| readBoolean() | Yes | No | No | |
| readByte() | Yes | No | No | |
| readBytes() | Yes | No | No | |
| readCharacterStream() | Yes | No | No | |
| readClob() | No* | No | No | |
| readDate() | Yes | No | No | |
| readDouble() | Yes | No | No | |
| readFloat() | Yes | No | No | |
| readInt() | Yes | No | No | |
| readLong() | Yes | No | No | |
| readNClob() | No* | No | No | |
| readNString() | No* | No | No | |
| readObject() | Yes | No | No | |
| readObject(Class) | Yes | No | No | |
| readRef() | No* | No | No | |
| readRowId() | No* | No | No | |
| readSQLXML() | No* | No | No | |
| readShort() | Yes | No | No | |
| readString() | Yes | No | No | |
| readTime() | Yes | No | No | |
| readTimestamp() | Yes | No | No | |
| readURL() | No* | No | No | |
| wasNull() | Yes | No | No |
SQLOutputis optional interface, but if it's implemented then the implementation must support all methods with the exception of optional methods marked*.
NOTE: * is not required to implement the methods unless the driver supports the associated data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| writeArray(Array) | No* | No | No | |
| writeAsciiStream(InputStream) | Yes | No | No | |
| writeBigDecimal(BigDecimal) | Yes | No | No | |
| writeBinaryStream(InputStream) | Yes | No | No | |
| writeBlob(Blob) | No* | No | No | |
| writeBoolean(boolean) | Yes | No | No | |
| writeByte(byte) | Yes | No | No | |
| writeBytes(byte[]) | Yes | No | No | |
| writeCharacterStream(Reader) | Yes | No | No | |
| writeClob(Clob) | No* | No | No | |
| writeDate(Date) | Yes | No | No | |
| writeDouble(double) | Yes | No | No | |
| writeFloat(float) | Yes | No | No | |
| writeInt(int) | Yes | No | No | |
| writeLong(long) | Yes | No | No | |
| writeNClob(NClob) | No* | No | No | |
| writeNString(String) | No* | No | No | |
| writeObject(Object, SQLType) | Yes | No | No | |
| writeObject(SQLData) | Yes | No | No | |
| writeRef(Ref) | No* | No | No | |
| writeRowId(RowId) | No* | No | No | |
| writeSQLXML(SQLXML) | No* | No | No | |
| writeShort(short) | Yes | No | No | |
| writeString(String) | Yes | No | No | |
| writeStruct(Struct) | No* | No | No | |
| writeTime(Time) | Yes | No | No | |
| writeTimestamp(Timestamp) | Yes | No | No | |
| writeURL(URL) | No* | No | No |
NOTE: All methods on the
SQLXMLinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| free() | Yes | No | No | |
| getBinaryStream() | Yes | No | No | |
| getCharacterStream() | Yes | No | No | |
| getSource(Class) | Yes | No | No | |
| getString() | Yes | No | No | |
| setBinaryStream() | Yes | No | No | |
| setCharacterStream() | Yes | No | No | |
| setResult(Class) | Yes | No | No | |
| setString(String) | Yes | No | No |
NOTE: * is not required to implement
execute(String sql, Statement.RETURN_GENERATED_KEYS)andexecuteUpdate(String sql, Statement.RETURN_GENERATED_KEYS)unless the driver supports generated keys.
NOTE: ** is not required to implement
getMoreResults(String sql, Statement.KEEP_CURRENT_RESULT | Statement.CLOSE_ALL_RESULTS)unlessDatabasemetaData.supportsMultipleOpenResults()returnstrue.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| addBatch(String) | Yes | No | No | #62 |
| cancel() | No | No | No | [#155][#155] |
| clearBatch() | Yes | No | No | #62 |
| clearWarnings() | Yes | Yes | No | dumb |
| close() | Yes | Yes | Yes | |
| closeOnCompletion() | Yes | No | No | #180 |
| execute(String) | Yes | Yes | Yes | |
| execute(String, String[]) | No | No | No | |
| execute(String, int[]) | No | No | No | |
| execute(String, int) | No* | No | No | |
| executeBatch() | Yes | No | No | #62 |
| executeLargeBatch() | Yes | No | No | |
| executeLargeUpdate(String) | Yes | No | No | |
| executeLargeUpdate(String, String[]) | No | No | No | |
| executeLargeUpdate(String, int[]) | No | No | No | |
| executeLargeUpdate(String, int) | No* | No | No | |
| executeQuery(String) | Yes | Yes | Yes | |
| executeUpdate(String) | Yes | Yes | Yes | |
| executeUpdate(String, String[]) | No | No | No | |
| executeUpdate(String, int[]) | No | No | No | |
| executeUpdate(String, int) | No* | No | No | |
| getConnection() | Yes | Yes | Yes | |
| getFetchDirection() | Yes | Yes | No | FETCH_FORWARD only |
| getFetchSize() | Yes | No | No | #178 |
| getGeneratedKeys() | No | No | No | |
| getLargeMaxRows() | Yes | No | No | |
| getLargeUpdateCount() | Yes | No | No | |
| getMaxFieldSize() | Yes | No | No | |
| getMaxRows() | Yes | Yes | Yes | |
| getMoreResults() | Yes | No | No | #182 |
| getMoreResults(int) | No** | No | No | #182 |
| getQueryTimeout() | Yes | No | No | |
| getResultSet() | Yes | Yes | Yes | |
| getResultSetConcurrency() | Yes | Yes | Yes | |
| getResultSetHoldability() | Yes | Yes | Yes | |
| getResultSetType() | Yes | Yes | Yes | |
| getUpdateCount() | Yes | Yes | Yes | |
| getWarnings() | Yes | Yes | No | dumb |
| isCloseOnCompletion() | Yes | No | No | #180 |
| isClosed() | Yes | Yes | Yes | |
| isPoolable() | Yes | No | No | #181 |
| setCursorName(String) | No | No | No | |
| setEscapeProcessing(boolean) | Yes | No | No | |
| setFetchDirection(int) | Yes | Yes | No | FETCH_FORWARD only |
| setFetchSize(int) | Yes | No | No | #178 |
| setLargeMaxRows(long) | Yes | No | No | |
| setMaxFieldSize(int) | Yes | No | No | |
| setMaxRows(int) | Yes | Yes | No | |
| setPoolable(boolean) | Yes | No | No | #181 |
| setQueryTimeout(int) | Yes | No | No |
NOTE: All methods on the
Structinterface must be fully implemented if the JDBC driver supports the data type.
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getAttributes() | Yes | No | No | |
| getAttributes(Map<String,Class<?>>) | Yes | No | No | |
| getSQLTypeName() | Yes | No | No |
NOTE: Wrapper is extended by
CallableStatement,Connection,DatabaseMetaData,ParameterMetaData,PreparedStatement,ResultSet,ResultSetMetaData, andStatementinterfaces and should be considered in scope of theirs implementations
NOTE: * must be implemented by
CallableStatementinterface if it's supported
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| CallableStatement.isWrapperFor(Class<?>) | No* | No | No | |
| CallableStatement.unwrap(Class) | No* | No | No | |
| Connection.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| Connection.unwrap(Class) | Yes | Yes | Yes | |
| DatabaseMetaData.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| DatabaseMetaData.unwrap(Class) | Yes | Yes | Yes | |
| ParameterMetaData.isWrapperFor(Class<?>) | Yes | No | No | |
| ParameterMetaData.unwrap(Class) | Yes | No | No | |
| PreparedStatement.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| PreparedStatement.unwrap(Class) | Yes | Yes | Yes | |
| ResultSet.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| ResultSet.unwrap(Class) | Yes | Yes | Yes | |
| ResultSetMetaData.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| ResultSetMetaData.unwrap(Class) | Yes | Yes | Yes | |
| Statement.isWrapperFor(Class<?>) | Yes | Yes | Yes | |
| Statement.unwrap(Class) | Yes | Yes | Yes | |
| DataSource.isWrapperFor(Class<?>) | Yes | No | No | |
| SataSource.unwrap(Class) | Yes | No | No |
NOTE: All interfaces in
javax.sqlare optional with an exception forDataSourcewhich is required to be implemented. All optional interfaces are skipped for now.
| Interface | Required | Supported | Covered | Details |
|---|---|---|---|---|
| DataSource | 6/7 | 0/6 + 0/1 | 0/6 + 0/1 | #175 |
| Method | Required? | Supported? | Covered? | Details |
|---|---|---|---|---|
| getConnection() | Yes | No | No | |
| getConnection(String, String) | Yes | No | No | |
| getLogWriter() | Yes | No | No | |
| getLoginTimeout() | Yes | No | No | |
| getParentLogger() | No | No | No | |
| setLogWriter(PrintWriter out) | Yes | No | No | |
| setLoginTimeout(int seconds) | Yes | No | No |
Transaction and isolation level metainformation methods correctly reports now that transactions do not supported, but they are marked as 'No' in 'Supported?' column. This is because JDBC compliant driver must support transactions and at least highest (serializable) isolation level, so just report that we don't support these features does not make our driver JDBC compliant. Also we cannot report serializable isolation level before transactions will be supported, because the API states we must report TRANSACTION_NONE isolation level when transactions does not supported (see DatabaseMetaData.supportsTransactions()).