-
Notifications
You must be signed in to change notification settings - Fork 19
JDBC status
- Contents
-
JDBC Status
- Summary
- Driver type
- JDBC acceptance criteria
-
API support
java.sql
packagejava.sql.Array
interface (optional)java.sql.Blob
interface (optional)java.sql.CallableStatement
interface (optional)java.sql.Clob
interface (optional)java.sql.Connection
interfacejava.sql.DatabaseMetaData
interfacejava.sql.Driver
interfacejava.sql.DriverAction
interface (optional)java.sql.NClob
interface (optional)java.sql.ParameterMetaData
interfacejava.sql.PreparedStatement
interfacejava.sql.Ref
interface (optional)java.sql.ResultSet
interfacejava.sql.ResultSetMetaData
interfacejava.sql.RowId
interface (optional)java.sql.Savepoint
interface (optional)java.sql.SQLInput
interface (optional)java.sql.SQLOutput
interface (optional)java.sql.SQLXML
interface (optional)java.sql.Statement
interfacejava.sql.Struct
interface (optional)java.sql.Wrapper
interface
- Data model
- 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.
- No escape syntax support.
- No batch execution.
- 75% of provided metainfo is incorrect or not verified.
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.
Here is a potential list of software to test JDBC completeness coverage level:
Web apps:
Libraries / Frameworks:
Dev apps / Clients:
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 | |
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 | ; 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 | 14/16 | 12/14 + 0/2 | 12/14 + 0/2 | #73 |
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 |
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 |
NOTE: It must implement the
CallableStatement
interface 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
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 |
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, but enough |
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 | |
rollback() | Yes | No | No | #63; blocked |
rollback(Savepoint) | No | No | No | |
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 | |
setSavepoint() | No | No | No | |
setSavepoint(String) | No | No | No | |
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 | #108 |
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 | #103 + #108; blocked |
supportsTransactions() | Yes | No | No | #63 + #108; blocked |
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
DriverAction
interface 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
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 |
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 | |
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 | |
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
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 |
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 ofCONCUR_UPDATABLE
NOTE: *** is not required to implement the methods unless driver supports a
ResultSet
type ofTYPE_SCROLL_SENSITIVE
orTYPE_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 | |
getDate(int) | Yes | Yes | Yes | |
getDate(int, Calendar) | Yes | No | No | |
getDouble(String) | Yes | Yes | Yes | |
getDouble(int) | Yes | Yes | Yes | |
getFetchDirection() | Yes | Yes | No | FETCH_FORWARD only |
getFetchSize() | Yes | No | No | |
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 | |
getTime(int) | Yes | Yes | No | |
getTime(int, Calendar) | Yes | No | No | |
getTimestamp(String) | Yes | Yes | No | |
getTimestamp(String, Calendar) | Yes | No | No | |
getTimestamp(int) | Yes | Yes | No | |
getTimestamp(int, Calendar) | Yes | No | No | |
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 | |
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 |
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
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 |
NOTE: It must implement the
Savepoint
interface if the methodDatabaseMetaData.supportsSavepoints()
returnstrue
Method | Required? | Supported? | Covered? | Details |
---|---|---|---|---|
getSavepointId() | Yes | No | No | |
getSavepointName() | Yes | No | No |
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 |
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 |
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 |
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 | |
cancel() | No | No | No | |
clearBatch() | Yes | No | No | |
clearWarnings() | Yes | Yes | No | dumb |
close() | Yes | Yes | Yes | |
closeOnCompletion() | Yes | No | No | |
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 | |
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 | |
getGeneratedKeys() | No | No | No | |
getLargeMaxRows() | Yes | No | No | |
getLargeUpdateCount() | Yes | No | No | |
getMaxFieldSize() | Yes | No | No | |
getMaxRows() | Yes | Yes | Yes | |
getMoreResults() | Yes | No | No | |
getMoreResults(int) | No** | No | No | |
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 | |
isClosed() | Yes | Yes | Yes | |
isPoolable() | Yes | No | No | |
setCursorName(String) | No | No | No | |
setEscapeProcessing(boolean) | Yes | No | No | |
setFetchDirection(int) | Yes | Yes | No | FETCH_FORWARD only |
setFetchSize(int) | Yes | No | No | |
setLargeMaxRows(long) | Yes | No | No | |
setMaxFieldSize(int) | Yes | No | No | |
setMaxRows(int) | Yes | Yes | No | |
setPoolable(boolean) | Yes | No | No | |
setQueryTimeout(int) | Yes | No | No |
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 |
NOTE: Wrapper is extended by
CallableStatement
,Connection
,DatabaseMetaData
,ParameterMetaData
,PreparedStatement
,ResultSet
,ResultSetMetaData
, andStatement
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 |
Tarantool/SQL types are going to be more strict, so tables below will be updated to reflect current Tarantool and Tarantool/SQL types.
Mapping from Tarantool/SQL types into JDBC and Java types:
Tarantool/SQL | JDBC | Java | Supported? | Details |
---|---|---|---|---|
FLOAT | Types.FLOAT | double | No | |
DOUBLE | Types.DOUBLE | double | No | |
REAL | Types.REAL | float | No | |
INT | Types.INTEGER | BigInteger | No | |
INTEGER | Types.INTEGER | BigInteger | No | |
DECIMAL | Types.DECIMAL | BigDecimal | No | |
DECIMAL(N) | Types.DECIMAL | BigDecimal | No | |
DECIMAL(N, M) | Types.DECIMAL | BigDecimal | No | |
NUMERIC | Types.NUMERIC | BigDecimal | No | |
NUMERIC(N) | Types.NUMERIC | BigDecimal | No | |
NUMERIC(N, M) | Types.NUMERIC | BigDecimal | No | |
NUM | Types.NUMERIC | BigDecimal | No | |
NUM(N) | Types.NUMERIC | BigDecimal | No | |
NUM(N, M) | Types.NUMERIC | BigDecimal | No | |
DATE | Types.DATE | java.sql.Date | No | blocked by #3694 |
TIME | Types.TIME | java.sql.Time | No | blocked by #3694 |
DATETIME | N/A | N/A | N/A | to be removed |
TIMESTAMP | Types.TIMESTAMP | java.sql.Timestamp | No | blocked by #3694 |
CHAR(N) | Types.CHAR | String | No | |
VARCHAR(N) | Types.VARCHAR | String | No | |
TEXT | Types.VARCHAR | String | No | |
BLOB | Types.VARBINARY | byte[] | No | blocked by #3650, tracked by #45 |
Mapping from Tarantool/SQL types into Tarantool native types (space format / index format) and additional Tarantool/SQL constraints (for reference):
Tarantool/SQL | Tarantool native | Tarantool/SQL constraints |
---|---|---|
FLOAT | number | float64 for insert, native number (int+fp) for select |
DOUBLE | number | float64 for insert, native number (int+fp) for select |
REAL | number | float64 for insert, native number (int+fp) for select |
INT | integer | -2^63 .. 2^63-1 for insert, native integer (-2^63 .. 2^64-1) for select; #3810 |
INTEGER | integer | -2^63 .. 2^63-1 for insert, native integer (-2^63 .. 2^64-1) for select; #3810 |
DECIMAL | number | same as REAL |
DECIMAL(N) | number | same as REAL |
DECIMAL(N, M) | number | same as REAL |
NUMERIC | number | same as REAL |
NUMERIC(N) | number | same as REAL |
NUMERIC(N, M) | number | same as REAL |
NUM | number | same as REAL |
NUM(N) | number | same as REAL |
NUM(N, M) | number | same as REAL |
DATE | number | broken at all (blocked by #3694) |
TIME | number | broken at all (blocked by #3694) |
DATETIME | number | broken at all (blocked by #3694) |
CHAR(N) | string | native string (of any length) |
VARCHAR(N) | string | native string (of any length) |
TEXT | string | native string (of any length) |
BLOB | scalar | native scalar (blocked by #3650, tracked by #45) |
Tarantool native types, msgpack and Lua types (for reference):
Tarantool native | Msgpack | Lua |
---|---|---|
integer | nil, pos/neg fixint, int/uint 8/16/32/64 | nil/box.NULL, number, cdata(int64_t), cdata(uint64_t) |
number | nil, pos/neg fixint, int/uint 8/16/32/64, float 32/64 | nil/box.NULL, number, cdata(int64_t), cdata(uint64_t) |
string | nil, fixstr, str 8/16/32 | nil/box.NULL, string |
scalar | all above, bin 8/16/32, bool | all above, bool |
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()).