Skip to content
Nikolai Ivanov edited this page May 20, 2019 · 2 revisions

Contents

JDBC API

Summary

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.

Driver type

The connector is Type-4 driver written in pure Java, and uses a native network protocol to communicate with Tarantool server.

See also:

API support

java.sql package

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
java.sql.Array interface (optional)

NOTE: All methods on the Array interface 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
java.sql.Blob interface (optional)

NOTE: All methods on the Blob interface 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
java.sql.CallableStatement interface (optional)

NOTE: It must implement the CallableStatement interface if the method DatabaseMetaData.supportsStoredProcedures() returns true

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
java.sql.Clob interface (optional)

NOTE: All methods on the Clob interface 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
java.sql.Connection interface

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
java.sql.DatabaseMetaData interface
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
java.sql.Driver interface

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
java.sql.DriverAction interface (optional)

NOTE: All methods on the DriverAction interface must be fully implemented if the JDBC driver supports driver notifications.

Method Required? Supported? Covered? Details
deregister() Yes No No
java.sql.NClob interface (optional)

NOTE: All methods on the NClob interface 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
java.sql.ParameterMetaData interface
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
java.sql.PreparedStatement interface

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
java.sql.Ref interface (optional)

NOTE: All methods on the Ref interface 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
java.sql.ResultSet interface

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 ResultSet concurrency of CONCUR_UPDATABLE

NOTE: *** is not required to implement the methods unless driver supports a ResultSet type of TYPE_SCROLL_SENSITIVE or TYPE_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
java.sql.ResultSetMetaData interface
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
java.sql.RowId interface (optional)

NOTE: All methods on the RowId interface 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
java.sql.Savepoint interface (optional)

NOTE: It must implement the Savepoint interface if the method DatabaseMetaData.supportsSavepoints() returns true

Method Required? Supported? Covered? Details
getSavepointId() Yes No No
getSavepointName() Yes No No
java.sql.SQLInput interface (optional)

SQLInput is 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
java.sql.SQLOutput interface (optional)

SQLOutput is 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
java.sql.SQLXML interface (optional)

NOTE: All methods on the SQLXML interface 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
java.sql.Statement interface

NOTE: * is not required to implement execute(String sql, Statement.RETURN_GENERATED_KEYS) and executeUpdate(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) unless DatabasemetaData.supportsMultipleOpenResults() returns true.

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
java.sql.Struct interface (optional)

NOTE: All methods on the Struct interface 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
java.sql.Wrapper interface

NOTE: Wrapper is extended by CallableStatement, Connection, DatabaseMetaData, ParameterMetaData, PreparedStatement, ResultSet, ResultSetMetaData, and Statement interfaces and should be considered in scope of theirs implementations

NOTE: * must be implemented by CallableStatement interface 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

javax.sql package (optional)

NOTE: All interfaces in javax.sql are optional with an exception for DataSource which 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
javax.sql.DataSource interface
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

Links

Notes

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()).