This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new cf7873618b9 Remove JDBCContext and CachedDatabaseMetaData and use 
databaseConnectionManager physical connection to get database metadata (#26888)
cf7873618b9 is described below

commit cf7873618b976c5f60648e42c19298c7b9c09a67
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Jul 10 18:44:58 2023 +0800

    Remove JDBCContext and CachedDatabaseMetaData and use 
databaseConnectionManager physical connection to get database metadata (#26888)
---
 .../jdbc/adapter/AdaptedDatabaseMetaData.java      | 537 ++++++++++-----------
 .../jdbc/context/CachedDatabaseMetaData.java       | 450 -----------------
 .../driver/jdbc/context/JDBCContext.java           |  71 ---
 .../core/connection/ShardingSphereConnection.java  |   9 +-
 .../core/datasource/ShardingSphereDataSource.java  |   7 +-
 .../metadata/ShardingSphereDatabaseMetaData.java   |   4 +-
 .../shardingsphere/driver/state/DriverState.java   |   6 +-
 .../driver/state/DriverStateContext.java           |   6 +-
 .../state/circuit/CircuitBreakDriverState.java     |   3 +-
 .../driver/state/lock/LockDriverState.java         |   3 +-
 .../driver/state/ok/OKDriverState.java             |   5 +-
 .../batch/BatchPreparedStatementExecutorTest.java  |   3 +-
 .../driver/jdbc/adapter/ConnectionAdapterTest.java |   3 +-
 .../jdbc/context/CachedDatabaseMetaDataTest.java   |  67 ---
 .../driver/jdbc/context/JDBCContextTest.java       |  52 --
 .../connection/ShardingSphereConnectionTest.java   |   3 +-
 .../ShardingSphereDatabaseMetaDataTest.java        |   3 -
 .../UnsupportedOperationConnectionTest.java        |   3 +-
 .../driver/state/DriverStateContextTest.java       |   3 +-
 .../state/circuit/CircuitBreakDriverStateTest.java |   3 +-
 .../driver/state/ok/OKDriverStateTest.java         |   3 +-
 21 files changed, 288 insertions(+), 956 deletions(-)

diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AdaptedDatabaseMetaData.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AdaptedDatabaseMetaData.java
index 55bdf693da3..17bf480d52b 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AdaptedDatabaseMetaData.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AdaptedDatabaseMetaData.java
@@ -18,10 +18,10 @@
 package org.apache.shardingsphere.driver.jdbc.adapter;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.driver.jdbc.context.CachedDatabaseMetaData;
 
 import java.sql.DatabaseMetaData;
 import java.sql.RowIdLifetime;
+import java.sql.SQLException;
 
 /**
  * Adapted database meta data.
@@ -29,677 +29,676 @@ import java.sql.RowIdLifetime;
 @RequiredArgsConstructor
 public abstract class AdaptedDatabaseMetaData extends WrapperAdapter 
implements DatabaseMetaData {
     
-    private final CachedDatabaseMetaData cachedDatabaseMetaData;
+    private final DatabaseMetaData databaseMetaData;
     
     @Override
-    public final String getURL() {
-        return cachedDatabaseMetaData.getUrl();
+    public final String getURL() throws SQLException {
+        return databaseMetaData.getURL();
     }
     
     @Override
-    public final String getUserName() {
-        return cachedDatabaseMetaData.getUserName();
+    public final String getUserName() throws SQLException {
+        return databaseMetaData.getUserName();
     }
     
     @Override
-    public final String getDatabaseProductName() {
-        return cachedDatabaseMetaData.getDatabaseProductName();
+    public final String getDatabaseProductName() throws SQLException {
+        return databaseMetaData.getDatabaseProductName();
     }
     
     @Override
-    public final String getDatabaseProductVersion() {
-        return cachedDatabaseMetaData.getDatabaseProductVersion();
+    public final String getDatabaseProductVersion() throws SQLException {
+        return databaseMetaData.getDatabaseProductVersion();
     }
     
     @Override
-    public final String getDriverName() {
-        return cachedDatabaseMetaData.getDriverName();
+    public final String getDriverName() throws SQLException {
+        return databaseMetaData.getDriverName();
     }
     
     @Override
-    public final String getDriverVersion() {
-        return cachedDatabaseMetaData.getDriverVersion();
+    public final String getDriverVersion() throws SQLException {
+        return databaseMetaData.getDriverVersion();
     }
     
     @Override
     public final int getDriverMajorVersion() {
-        return cachedDatabaseMetaData.getDriverMajorVersion();
+        return databaseMetaData.getDriverMajorVersion();
     }
     
     @Override
     public final int getDriverMinorVersion() {
-        return cachedDatabaseMetaData.getDriverMinorVersion();
+        return databaseMetaData.getDriverMinorVersion();
     }
     
     @Override
-    public final int getDatabaseMajorVersion() {
-        return cachedDatabaseMetaData.getDatabaseMajorVersion();
+    public final int getDatabaseMajorVersion() throws SQLException {
+        return databaseMetaData.getDatabaseMajorVersion();
     }
     
     @Override
-    public final int getDatabaseMinorVersion() {
-        return cachedDatabaseMetaData.getDatabaseMinorVersion();
+    public final int getDatabaseMinorVersion() throws SQLException {
+        return databaseMetaData.getDatabaseMinorVersion();
     }
     
     @Override
-    public final int getJDBCMajorVersion() {
-        return cachedDatabaseMetaData.getJdbcMajorVersion();
+    public final int getJDBCMajorVersion() throws SQLException {
+        return databaseMetaData.getJDBCMajorVersion();
     }
     
     @Override
-    public final int getJDBCMinorVersion() {
-        return cachedDatabaseMetaData.getJdbcMinorVersion();
+    public final int getJDBCMinorVersion() throws SQLException {
+        return databaseMetaData.getJDBCMinorVersion();
     }
     
     @Override
-    public final boolean isReadOnly() {
-        return cachedDatabaseMetaData.isReadOnly();
+    public final boolean isReadOnly() throws SQLException {
+        return databaseMetaData.isReadOnly();
     }
     
     @Override
-    public final boolean allProceduresAreCallable() {
-        return cachedDatabaseMetaData.isAllProceduresAreCallable();
+    public final boolean allProceduresAreCallable() throws SQLException {
+        return databaseMetaData.allProceduresAreCallable();
     }
     
     @Override
-    public final boolean allTablesAreSelectable() {
-        return cachedDatabaseMetaData.isAllTablesAreSelectable();
+    public final boolean allTablesAreSelectable() throws SQLException {
+        return databaseMetaData.allTablesAreSelectable();
     }
     
     @Override
-    public final boolean nullsAreSortedHigh() {
-        return cachedDatabaseMetaData.isNullsAreSortedHigh();
+    public final boolean nullsAreSortedHigh() throws SQLException {
+        return databaseMetaData.nullsAreSortedHigh();
     }
     
     @Override
-    public final boolean nullsAreSortedLow() {
-        return cachedDatabaseMetaData.isNullsAreSortedLow();
+    public final boolean nullsAreSortedLow() throws SQLException {
+        return databaseMetaData.nullsAreSortedLow();
     }
     
     @Override
-    public final boolean nullsAreSortedAtStart() {
-        return cachedDatabaseMetaData.isNullsAreSortedAtStart();
+    public final boolean nullsAreSortedAtStart() throws SQLException {
+        return databaseMetaData.nullsAreSortedAtStart();
     }
     
     @Override
-    public final boolean nullsAreSortedAtEnd() {
-        return cachedDatabaseMetaData.isNullsAreSortedAtEnd();
+    public final boolean nullsAreSortedAtEnd() throws SQLException {
+        return databaseMetaData.nullsAreSortedAtEnd();
     }
     
     @Override
-    public final boolean usesLocalFiles() {
-        return cachedDatabaseMetaData.isUsesLocalFiles();
+    public final boolean usesLocalFiles() throws SQLException {
+        return databaseMetaData.usesLocalFiles();
     }
     
     @Override
-    public final boolean usesLocalFilePerTable() {
-        return cachedDatabaseMetaData.isUsesLocalFilePerTable();
+    public final boolean usesLocalFilePerTable() throws SQLException {
+        return databaseMetaData.usesLocalFilePerTable();
     }
     
     @Override
-    public final boolean supportsMixedCaseIdentifiers() {
-        return cachedDatabaseMetaData.isStoresMixedCaseIdentifiers();
+    public final boolean supportsMixedCaseIdentifiers() throws SQLException {
+        return databaseMetaData.storesMixedCaseIdentifiers();
     }
     
     @Override
-    public final boolean storesUpperCaseIdentifiers() {
-        return cachedDatabaseMetaData.isStoresUpperCaseIdentifiers();
+    public final boolean storesUpperCaseIdentifiers() throws SQLException {
+        return databaseMetaData.storesUpperCaseIdentifiers();
     }
     
     @Override
-    public final boolean storesLowerCaseIdentifiers() {
-        return cachedDatabaseMetaData.isStoresLowerCaseIdentifiers();
+    public final boolean storesLowerCaseIdentifiers() throws SQLException {
+        return databaseMetaData.storesLowerCaseIdentifiers();
     }
     
     @Override
-    public final boolean storesMixedCaseIdentifiers() {
-        return cachedDatabaseMetaData.isStoresMixedCaseIdentifiers();
+    public final boolean storesMixedCaseIdentifiers() throws SQLException {
+        return databaseMetaData.storesMixedCaseIdentifiers();
     }
     
     @Override
-    public final boolean supportsMixedCaseQuotedIdentifiers() {
-        return cachedDatabaseMetaData.isSupportsMixedCaseQuotedIdentifiers();
+    public final boolean supportsMixedCaseQuotedIdentifiers() throws 
SQLException {
+        return databaseMetaData.supportsMixedCaseQuotedIdentifiers();
     }
     
     @Override
-    public final boolean storesUpperCaseQuotedIdentifiers() {
-        return cachedDatabaseMetaData.isStoresUpperCaseQuotedIdentifiers();
+    public final boolean storesUpperCaseQuotedIdentifiers() throws 
SQLException {
+        return databaseMetaData.storesUpperCaseQuotedIdentifiers();
     }
     
     @Override
-    public final boolean storesLowerCaseQuotedIdentifiers() {
-        return cachedDatabaseMetaData.isStoresLowerCaseQuotedIdentifiers();
+    public final boolean storesLowerCaseQuotedIdentifiers() throws 
SQLException {
+        return databaseMetaData.storesLowerCaseQuotedIdentifiers();
     }
     
     @Override
-    public final boolean storesMixedCaseQuotedIdentifiers() {
-        return cachedDatabaseMetaData.isSupportsMixedCaseQuotedIdentifiers();
+    public final boolean storesMixedCaseQuotedIdentifiers() throws 
SQLException {
+        return databaseMetaData.storesMixedCaseQuotedIdentifiers();
     }
     
     @Override
-    public final String getIdentifierQuoteString() {
-        return cachedDatabaseMetaData.getIdentifierQuoteString();
+    public final String getIdentifierQuoteString() throws SQLException {
+        return databaseMetaData.getIdentifierQuoteString();
     }
     
     @Override
-    public final String getSQLKeywords() {
-        return cachedDatabaseMetaData.getSqlKeywords();
+    public final String getSQLKeywords() throws SQLException {
+        return databaseMetaData.getSQLKeywords();
     }
     
     @Override
-    public final String getNumericFunctions() {
-        return cachedDatabaseMetaData.getNumericFunctions();
+    public final String getNumericFunctions() throws SQLException {
+        return databaseMetaData.getNumericFunctions();
     }
     
     @Override
-    public final String getStringFunctions() {
-        return cachedDatabaseMetaData.getStringFunctions();
+    public final String getStringFunctions() throws SQLException {
+        return databaseMetaData.getStringFunctions();
     }
     
     @Override
-    public final String getSystemFunctions() {
-        return cachedDatabaseMetaData.getSystemFunctions();
+    public final String getSystemFunctions() throws SQLException {
+        return databaseMetaData.getSystemFunctions();
     }
     
     @Override
-    public final String getTimeDateFunctions() {
-        return cachedDatabaseMetaData.getTimeDateFunctions();
+    public final String getTimeDateFunctions() throws SQLException {
+        return databaseMetaData.getTimeDateFunctions();
     }
     
     @Override
-    public final String getSearchStringEscape() {
-        return cachedDatabaseMetaData.getSearchStringEscape();
+    public final String getSearchStringEscape() throws SQLException {
+        return databaseMetaData.getSearchStringEscape();
     }
     
     @Override
-    public final String getExtraNameCharacters() {
-        return cachedDatabaseMetaData.getExtraNameCharacters();
+    public final String getExtraNameCharacters() throws SQLException {
+        return databaseMetaData.getExtraNameCharacters();
     }
     
     @Override
-    public final boolean supportsAlterTableWithAddColumn() {
-        return cachedDatabaseMetaData.isSupportsAlterTableWithAddColumn();
+    public final boolean supportsAlterTableWithAddColumn() throws SQLException 
{
+        return databaseMetaData.supportsAlterTableWithAddColumn();
     }
     
     @Override
-    public final boolean supportsAlterTableWithDropColumn() {
-        return cachedDatabaseMetaData.isSupportsAlterTableWithDropColumn();
+    public final boolean supportsAlterTableWithDropColumn() throws 
SQLException {
+        return databaseMetaData.supportsAlterTableWithDropColumn();
     }
     
     @Override
-    public final boolean supportsColumnAliasing() {
-        return cachedDatabaseMetaData.isSupportsColumnAliasing();
+    public final boolean supportsColumnAliasing() throws SQLException {
+        return databaseMetaData.supportsColumnAliasing();
     }
     
     @Override
-    public final boolean nullPlusNonNullIsNull() {
-        return cachedDatabaseMetaData.isNullPlusNonNullIsNull();
+    public final boolean nullPlusNonNullIsNull() throws SQLException {
+        return databaseMetaData.nullPlusNonNullIsNull();
     }
     
     @Override
-    public final boolean supportsConvert() {
-        return cachedDatabaseMetaData.isSupportsConvert();
+    public final boolean supportsConvert() throws SQLException {
+        return databaseMetaData.supportsConvert();
     }
     
     @Override
-    public final boolean supportsConvert(final int fromType, final int toType) 
{
-        return cachedDatabaseMetaData.isSupportsConvert();
+    public final boolean supportsConvert(final int fromType, final int toType) 
throws SQLException {
+        return databaseMetaData.supportsConvert();
     }
     
     @Override
-    public final boolean supportsTableCorrelationNames() {
-        return cachedDatabaseMetaData.isSupportsTableCorrelationNames();
+    public final boolean supportsTableCorrelationNames() throws SQLException {
+        return databaseMetaData.supportsTableCorrelationNames();
     }
     
     @Override
-    public final boolean supportsDifferentTableCorrelationNames() {
-        return 
cachedDatabaseMetaData.isSupportsDifferentTableCorrelationNames();
+    public final boolean supportsDifferentTableCorrelationNames() throws 
SQLException {
+        return databaseMetaData.supportsDifferentTableCorrelationNames();
     }
     
     @Override
-    public final boolean supportsExpressionsInOrderBy() {
-        return cachedDatabaseMetaData.isSupportsExpressionsInOrderBy();
+    public final boolean supportsExpressionsInOrderBy() throws SQLException {
+        return databaseMetaData.supportsExpressionsInOrderBy();
     }
     
     @Override
-    public final boolean supportsOrderByUnrelated() {
-        return cachedDatabaseMetaData.isSupportsOrderByUnrelated();
+    public final boolean supportsOrderByUnrelated() throws SQLException {
+        return databaseMetaData.supportsOrderByUnrelated();
     }
     
     @Override
-    public final boolean supportsGroupBy() {
-        return cachedDatabaseMetaData.isSupportsGroupBy();
+    public final boolean supportsGroupBy() throws SQLException {
+        return databaseMetaData.supportsGroupBy();
     }
     
     @Override
-    public final boolean supportsGroupByUnrelated() {
-        return cachedDatabaseMetaData.isSupportsGroupByUnrelated();
+    public final boolean supportsGroupByUnrelated() throws SQLException {
+        return databaseMetaData.supportsGroupByUnrelated();
     }
     
     @Override
-    public final boolean supportsGroupByBeyondSelect() {
-        return cachedDatabaseMetaData.isSupportsGroupByBeyondSelect();
+    public final boolean supportsGroupByBeyondSelect() throws SQLException {
+        return databaseMetaData.supportsGroupByBeyondSelect();
     }
     
     @Override
-    public final boolean supportsLikeEscapeClause() {
-        return cachedDatabaseMetaData.isSupportsLikeEscapeClause();
+    public final boolean supportsLikeEscapeClause() throws SQLException {
+        return databaseMetaData.supportsLikeEscapeClause();
     }
     
     @Override
-    public final boolean supportsMultipleResultSets() {
-        return cachedDatabaseMetaData.isSupportsMultipleResultSets();
+    public final boolean supportsMultipleResultSets() throws SQLException {
+        return databaseMetaData.supportsMultipleResultSets();
     }
     
     @Override
-    public final boolean supportsMultipleTransactions() {
-        return cachedDatabaseMetaData.isSupportsMultipleTransactions();
+    public final boolean supportsMultipleTransactions() throws SQLException {
+        return databaseMetaData.supportsMultipleTransactions();
     }
     
     @Override
-    public final boolean supportsNonNullableColumns() {
-        return cachedDatabaseMetaData.isSupportsNonNullableColumns();
+    public final boolean supportsNonNullableColumns() throws SQLException {
+        return databaseMetaData.supportsNonNullableColumns();
     }
     
     @Override
-    public final boolean supportsMinimumSQLGrammar() {
-        return cachedDatabaseMetaData.isSupportsMinimumSQLGrammar();
+    public final boolean supportsMinimumSQLGrammar() throws SQLException {
+        return databaseMetaData.supportsMinimumSQLGrammar();
     }
     
     @Override
-    public final boolean supportsCoreSQLGrammar() {
-        return cachedDatabaseMetaData.isSupportsCoreSQLGrammar();
+    public final boolean supportsCoreSQLGrammar() throws SQLException {
+        return databaseMetaData.supportsCoreSQLGrammar();
     }
     
     @Override
-    public final boolean supportsExtendedSQLGrammar() {
-        return cachedDatabaseMetaData.isSupportsExtendedSQLGrammar();
+    public final boolean supportsExtendedSQLGrammar() throws SQLException {
+        return databaseMetaData.supportsExtendedSQLGrammar();
     }
     
     @Override
-    public final boolean supportsANSI92EntryLevelSQL() {
-        return cachedDatabaseMetaData.isSupportsANSI92EntryLevelSQL();
+    public final boolean supportsANSI92EntryLevelSQL() throws SQLException {
+        return databaseMetaData.supportsANSI92EntryLevelSQL();
     }
     
     @Override
-    public final boolean supportsANSI92IntermediateSQL() {
-        return cachedDatabaseMetaData.isSupportsANSI92IntermediateSQL();
+    public final boolean supportsANSI92IntermediateSQL() throws SQLException {
+        return databaseMetaData.supportsANSI92IntermediateSQL();
     }
     
     @Override
-    public final boolean supportsANSI92FullSQL() {
-        return cachedDatabaseMetaData.isSupportsANSI92FullSQL();
+    public final boolean supportsANSI92FullSQL() throws SQLException {
+        return databaseMetaData.supportsANSI92FullSQL();
     }
     
     @Override
-    public final boolean supportsIntegrityEnhancementFacility() {
-        return cachedDatabaseMetaData.isSupportsIntegrityEnhancementFacility();
+    public final boolean supportsIntegrityEnhancementFacility() throws 
SQLException {
+        return databaseMetaData.supportsIntegrityEnhancementFacility();
     }
     
     @Override
-    public final boolean supportsOuterJoins() {
-        return cachedDatabaseMetaData.isSupportsOuterJoins();
+    public final boolean supportsOuterJoins() throws SQLException {
+        return databaseMetaData.supportsOuterJoins();
     }
     
     @Override
-    public final boolean supportsFullOuterJoins() {
-        return cachedDatabaseMetaData.isSupportsFullOuterJoins();
+    public final boolean supportsFullOuterJoins() throws SQLException {
+        return databaseMetaData.supportsFullOuterJoins();
     }
     
     @Override
-    public final boolean supportsLimitedOuterJoins() {
-        return cachedDatabaseMetaData.isSupportsLimitedOuterJoins();
+    public final boolean supportsLimitedOuterJoins() throws SQLException {
+        return databaseMetaData.supportsLimitedOuterJoins();
     }
     
     @Override
-    public final String getSchemaTerm() {
-        return cachedDatabaseMetaData.getSchemaTerm();
+    public final String getSchemaTerm() throws SQLException {
+        return databaseMetaData.getSchemaTerm();
     }
     
     @Override
-    public final String getProcedureTerm() {
-        return cachedDatabaseMetaData.getProcedureTerm();
+    public final String getProcedureTerm() throws SQLException {
+        return databaseMetaData.getProcedureTerm();
     }
     
     @Override
-    public final String getCatalogTerm() {
-        return cachedDatabaseMetaData.getCatalogTerm();
+    public final String getCatalogTerm() throws SQLException {
+        return databaseMetaData.getCatalogTerm();
     }
     
     @Override
-    public final boolean isCatalogAtStart() {
-        return cachedDatabaseMetaData.isCatalogAtStart();
+    public final boolean isCatalogAtStart() throws SQLException {
+        return databaseMetaData.isCatalogAtStart();
     }
     
     @Override
-    public final String getCatalogSeparator() {
-        return cachedDatabaseMetaData.getCatalogSeparator();
+    public final String getCatalogSeparator() throws SQLException {
+        return databaseMetaData.getCatalogSeparator();
     }
     
     @Override
-    public final boolean supportsSchemasInDataManipulation() {
-        return cachedDatabaseMetaData.isSupportsSchemasInDataManipulation();
+    public final boolean supportsSchemasInDataManipulation() throws 
SQLException {
+        return databaseMetaData.supportsSchemasInDataManipulation();
     }
     
     @Override
-    public final boolean supportsSchemasInProcedureCalls() {
-        return cachedDatabaseMetaData.isSupportsSchemasInProcedureCalls();
+    public final boolean supportsSchemasInProcedureCalls() throws SQLException 
{
+        return databaseMetaData.supportsSchemasInProcedureCalls();
     }
     
     @Override
-    public final boolean supportsSchemasInTableDefinitions() {
-        return cachedDatabaseMetaData.isSupportsSchemasInTableDefinitions();
+    public final boolean supportsSchemasInTableDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsSchemasInTableDefinitions();
     }
     
     @Override
-    public final boolean supportsSchemasInIndexDefinitions() {
-        return cachedDatabaseMetaData.isSupportsSchemasInIndexDefinitions();
+    public final boolean supportsSchemasInIndexDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsSchemasInIndexDefinitions();
     }
     
     @Override
-    public final boolean supportsSchemasInPrivilegeDefinitions() {
-        return 
cachedDatabaseMetaData.isSupportsSchemasInPrivilegeDefinitions();
+    public final boolean supportsSchemasInPrivilegeDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsSchemasInPrivilegeDefinitions();
     }
     
     @Override
-    public final boolean supportsCatalogsInDataManipulation() {
-        return cachedDatabaseMetaData.isSupportsCatalogsInDataManipulation();
+    public final boolean supportsCatalogsInDataManipulation() throws 
SQLException {
+        return databaseMetaData.supportsCatalogsInDataManipulation();
     }
     
     @Override
-    public final boolean supportsCatalogsInProcedureCalls() {
-        return cachedDatabaseMetaData.isSupportsCatalogsInProcedureCalls();
+    public final boolean supportsCatalogsInProcedureCalls() throws 
SQLException {
+        return databaseMetaData.supportsCatalogsInProcedureCalls();
     }
     
     @Override
-    public final boolean supportsCatalogsInTableDefinitions() {
-        return cachedDatabaseMetaData.isSupportsCatalogsInTableDefinitions();
+    public final boolean supportsCatalogsInTableDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsCatalogsInTableDefinitions();
     }
     
     @Override
-    public final boolean supportsCatalogsInIndexDefinitions() {
-        return cachedDatabaseMetaData.isSupportsCatalogsInIndexDefinitions();
+    public final boolean supportsCatalogsInIndexDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsCatalogsInIndexDefinitions();
     }
     
     @Override
-    public final boolean supportsCatalogsInPrivilegeDefinitions() {
-        return 
cachedDatabaseMetaData.isSupportsCatalogsInPrivilegeDefinitions();
+    public final boolean supportsCatalogsInPrivilegeDefinitions() throws 
SQLException {
+        return databaseMetaData.supportsCatalogsInPrivilegeDefinitions();
     }
     
     @Override
-    public final boolean supportsPositionedDelete() {
-        return cachedDatabaseMetaData.isSupportsPositionedDelete();
+    public final boolean supportsPositionedDelete() throws SQLException {
+        return databaseMetaData.supportsPositionedDelete();
     }
     
     @Override
-    public final boolean supportsPositionedUpdate() {
-        return cachedDatabaseMetaData.isSupportsPositionedUpdate();
+    public final boolean supportsPositionedUpdate() throws SQLException {
+        return databaseMetaData.supportsPositionedUpdate();
     }
     
     @Override
-    public final boolean supportsSelectForUpdate() {
-        return cachedDatabaseMetaData.isSupportsSelectForUpdate();
+    public final boolean supportsSelectForUpdate() throws SQLException {
+        return databaseMetaData.supportsSelectForUpdate();
     }
     
     @Override
-    public final boolean supportsStoredProcedures() {
-        return cachedDatabaseMetaData.isSupportsStoredProcedures();
+    public final boolean supportsStoredProcedures() throws SQLException {
+        return databaseMetaData.supportsStoredProcedures();
     }
     
     @Override
-    public final boolean supportsSubqueriesInComparisons() {
-        return cachedDatabaseMetaData.isSupportsSubqueriesInComparisons();
+    public final boolean supportsSubqueriesInComparisons() throws SQLException 
{
+        return databaseMetaData.supportsSubqueriesInComparisons();
     }
     
     @Override
-    public final boolean supportsSubqueriesInExists() {
-        return cachedDatabaseMetaData.isSupportsSubqueriesInExists();
+    public final boolean supportsSubqueriesInExists() throws SQLException {
+        return databaseMetaData.supportsSubqueriesInExists();
     }
     
     @Override
-    public final boolean supportsSubqueriesInIns() {
-        return cachedDatabaseMetaData.isSupportsSubqueriesInIns();
+    public final boolean supportsSubqueriesInIns() throws SQLException {
+        return databaseMetaData.supportsSubqueriesInIns();
     }
     
     @Override
-    public final boolean supportsSubqueriesInQuantifieds() {
-        return cachedDatabaseMetaData.isSupportsSubqueriesInQuantifieds();
+    public final boolean supportsSubqueriesInQuantifieds() throws SQLException 
{
+        return databaseMetaData.supportsSubqueriesInQuantifieds();
     }
     
     @Override
-    public final boolean supportsCorrelatedSubqueries() {
-        return cachedDatabaseMetaData.isSupportsCorrelatedSubqueries();
+    public final boolean supportsCorrelatedSubqueries() throws SQLException {
+        return databaseMetaData.supportsCorrelatedSubqueries();
     }
     
     @Override
-    public final boolean supportsUnion() {
-        return cachedDatabaseMetaData.isSupportsUnion();
+    public final boolean supportsUnion() throws SQLException {
+        return databaseMetaData.supportsUnion();
     }
     
     @Override
-    public final boolean supportsUnionAll() {
-        return cachedDatabaseMetaData.isSupportsUnionAll();
+    public final boolean supportsUnionAll() throws SQLException {
+        return databaseMetaData.supportsUnionAll();
     }
     
     @Override
-    public final boolean supportsOpenCursorsAcrossCommit() {
-        return cachedDatabaseMetaData.isSupportsOpenCursorsAcrossCommit();
+    public final boolean supportsOpenCursorsAcrossCommit() throws SQLException 
{
+        return databaseMetaData.supportsOpenCursorsAcrossCommit();
     }
     
     @Override
-    public final boolean supportsOpenCursorsAcrossRollback() {
-        return cachedDatabaseMetaData.isSupportsOpenCursorsAcrossRollback();
+    public final boolean supportsOpenCursorsAcrossRollback() throws 
SQLException {
+        return databaseMetaData.supportsOpenCursorsAcrossRollback();
     }
     
     @Override
-    public final boolean supportsOpenStatementsAcrossCommit() {
-        return cachedDatabaseMetaData.isSupportsOpenStatementsAcrossCommit();
+    public final boolean supportsOpenStatementsAcrossCommit() throws 
SQLException {
+        return databaseMetaData.supportsOpenStatementsAcrossCommit();
     }
     
     @Override
-    public final boolean supportsOpenStatementsAcrossRollback() {
-        return cachedDatabaseMetaData.isSupportsOpenStatementsAcrossRollback();
+    public final boolean supportsOpenStatementsAcrossRollback() throws 
SQLException {
+        return databaseMetaData.supportsOpenStatementsAcrossRollback();
     }
     
     @Override
-    public final int getMaxBinaryLiteralLength() {
-        return cachedDatabaseMetaData.getMaxBinaryLiteralLength();
+    public final int getMaxBinaryLiteralLength() throws SQLException {
+        return databaseMetaData.getMaxBinaryLiteralLength();
     }
     
     @Override
-    public final int getMaxCharLiteralLength() {
-        return cachedDatabaseMetaData.getMaxCharLiteralLength();
+    public final int getMaxCharLiteralLength() throws SQLException {
+        return databaseMetaData.getMaxCharLiteralLength();
     }
     
     @Override
-    public final int getMaxColumnNameLength() {
-        return cachedDatabaseMetaData.getMaxColumnNameLength();
+    public final int getMaxColumnNameLength() throws SQLException {
+        return databaseMetaData.getMaxColumnNameLength();
     }
     
     @Override
-    public final int getMaxColumnsInGroupBy() {
-        return cachedDatabaseMetaData.getMaxColumnsInGroupBy();
+    public final int getMaxColumnsInGroupBy() throws SQLException {
+        return databaseMetaData.getMaxColumnsInGroupBy();
     }
     
     @Override
-    public final int getMaxColumnsInIndex() {
-        return cachedDatabaseMetaData.getMaxColumnsInIndex();
+    public final int getMaxColumnsInIndex() throws SQLException {
+        return databaseMetaData.getMaxColumnsInIndex();
     }
     
     @Override
-    public final int getMaxColumnsInOrderBy() {
-        return cachedDatabaseMetaData.getMaxColumnsInOrderBy();
+    public final int getMaxColumnsInOrderBy() throws SQLException {
+        return databaseMetaData.getMaxColumnsInOrderBy();
     }
     
     @Override
-    public final int getMaxColumnsInSelect() {
-        return cachedDatabaseMetaData.getMaxColumnsInSelect();
+    public final int getMaxColumnsInSelect() throws SQLException {
+        return databaseMetaData.getMaxColumnsInSelect();
     }
     
     @Override
-    public final int getMaxColumnsInTable() {
-        return cachedDatabaseMetaData.getMaxColumnsInTable();
+    public final int getMaxColumnsInTable() throws SQLException {
+        return databaseMetaData.getMaxColumnsInTable();
     }
     
     @Override
-    public final int getMaxConnections() {
-        return cachedDatabaseMetaData.getMaxConnections();
+    public final int getMaxConnections() throws SQLException {
+        return databaseMetaData.getMaxConnections();
     }
     
     @Override
-    public final int getMaxCursorNameLength() {
-        return cachedDatabaseMetaData.getMaxCursorNameLength();
+    public final int getMaxCursorNameLength() throws SQLException {
+        return databaseMetaData.getMaxCursorNameLength();
     }
     
     @Override
-    public final int getMaxIndexLength() {
-        return cachedDatabaseMetaData.getMaxIndexLength();
+    public final int getMaxIndexLength() throws SQLException {
+        return databaseMetaData.getMaxIndexLength();
     }
     
     @Override
-    public final int getMaxSchemaNameLength() {
-        return cachedDatabaseMetaData.getMaxSchemaNameLength();
+    public final int getMaxSchemaNameLength() throws SQLException {
+        return databaseMetaData.getMaxSchemaNameLength();
     }
     
     @Override
-    public final int getMaxProcedureNameLength() {
-        return cachedDatabaseMetaData.getMaxProcedureNameLength();
+    public final int getMaxProcedureNameLength() throws SQLException {
+        return databaseMetaData.getMaxProcedureNameLength();
     }
     
     @Override
-    public final int getMaxCatalogNameLength() {
-        return cachedDatabaseMetaData.getMaxCatalogNameLength();
+    public final int getMaxCatalogNameLength() throws SQLException {
+        return databaseMetaData.getMaxCatalogNameLength();
     }
     
     @Override
-    public final int getMaxRowSize() {
-        return cachedDatabaseMetaData.getMaxRowSize();
+    public final int getMaxRowSize() throws SQLException {
+        return databaseMetaData.getMaxRowSize();
     }
     
     @Override
-    public final boolean doesMaxRowSizeIncludeBlobs() {
-        return cachedDatabaseMetaData.isDoesMaxRowSizeIncludeBlobs();
+    public final boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
+        return databaseMetaData.doesMaxRowSizeIncludeBlobs();
     }
     
     @Override
-    public final int getMaxStatementLength() {
-        return cachedDatabaseMetaData.getMaxStatementLength();
+    public final int getMaxStatementLength() throws SQLException {
+        return databaseMetaData.getMaxStatementLength();
     }
     
     @Override
-    public final int getMaxStatements() {
-        return cachedDatabaseMetaData.getMaxStatements();
+    public final int getMaxStatements() throws SQLException {
+        return databaseMetaData.getMaxStatements();
     }
     
     @Override
-    public final int getMaxTableNameLength() {
-        return cachedDatabaseMetaData.getMaxTableNameLength();
+    public final int getMaxTableNameLength() throws SQLException {
+        return databaseMetaData.getMaxTableNameLength();
     }
     
     @Override
-    public final int getMaxTablesInSelect() {
-        return cachedDatabaseMetaData.getMaxTablesInSelect();
+    public final int getMaxTablesInSelect() throws SQLException {
+        return databaseMetaData.getMaxTablesInSelect();
     }
     
     @Override
-    public final int getMaxUserNameLength() {
-        return cachedDatabaseMetaData.getMaxUserNameLength();
+    public final int getMaxUserNameLength() throws SQLException {
+        return databaseMetaData.getMaxUserNameLength();
     }
     
     @Override
-    public final int getDefaultTransactionIsolation() {
-        return cachedDatabaseMetaData.getDefaultTransactionIsolation();
+    public final int getDefaultTransactionIsolation() throws SQLException {
+        return databaseMetaData.getDefaultTransactionIsolation();
     }
     
     @Override
-    public final boolean supportsTransactions() {
-        return cachedDatabaseMetaData.isSupportsTransactions();
+    public final boolean supportsTransactions() throws SQLException {
+        return databaseMetaData.supportsTransactions();
     }
     
     @Override
-    public final boolean 
supportsDataDefinitionAndDataManipulationTransactions() {
-        return 
cachedDatabaseMetaData.isSupportsDataDefinitionAndDataManipulationTransactions();
+    public final boolean 
supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
+        return 
databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions();
     }
     
     @Override
-    public final boolean supportsDataManipulationTransactionsOnly() {
-        return 
cachedDatabaseMetaData.isSupportsDataManipulationTransactionsOnly();
+    public final boolean supportsDataManipulationTransactionsOnly() throws 
SQLException {
+        return databaseMetaData.supportsDataManipulationTransactionsOnly();
     }
     
     @Override
-    public final boolean dataDefinitionCausesTransactionCommit() {
-        return 
cachedDatabaseMetaData.isDataDefinitionCausesTransactionCommit();
+    public final boolean dataDefinitionCausesTransactionCommit() throws 
SQLException {
+        return databaseMetaData.dataDefinitionCausesTransactionCommit();
     }
     
     @Override
-    public final boolean dataDefinitionIgnoredInTransactions() {
-        return cachedDatabaseMetaData.isDataDefinitionIgnoredInTransactions();
+    public final boolean dataDefinitionIgnoredInTransactions() throws 
SQLException {
+        return databaseMetaData.dataDefinitionIgnoredInTransactions();
     }
     
     @Override
-    public final boolean supportsBatchUpdates() {
-        return cachedDatabaseMetaData.isSupportsBatchUpdates();
+    public final boolean supportsBatchUpdates() throws SQLException {
+        return databaseMetaData.supportsBatchUpdates();
     }
     
     @Override
-    public final boolean supportsSavepoints() {
-        return cachedDatabaseMetaData.isSupportsSavepoints();
+    public final boolean supportsSavepoints() throws SQLException {
+        return databaseMetaData.supportsSavepoints();
     }
     
     @Override
-    public final boolean supportsNamedParameters() {
-        return cachedDatabaseMetaData.isSupportsNamedParameters();
+    public final boolean supportsNamedParameters() throws SQLException {
+        return databaseMetaData.supportsNamedParameters();
     }
     
     @Override
-    public final boolean supportsMultipleOpenResults() {
-        return cachedDatabaseMetaData.isSupportsMultipleOpenResults();
+    public final boolean supportsMultipleOpenResults() throws SQLException {
+        return databaseMetaData.supportsMultipleOpenResults();
     }
     
     @Override
-    public final boolean supportsGetGeneratedKeys() {
-        return cachedDatabaseMetaData.isSupportsGetGeneratedKeys();
+    public final boolean supportsGetGeneratedKeys() throws SQLException {
+        return databaseMetaData.supportsGetGeneratedKeys();
     }
     
     @Override
-    public final int getResultSetHoldability() {
-        return cachedDatabaseMetaData.getResultSetHoldability();
+    public final int getResultSetHoldability() throws SQLException {
+        return databaseMetaData.getResultSetHoldability();
     }
     
-    @SuppressWarnings("MagicConstant")
     @Override
-    public final int getSQLStateType() {
-        return cachedDatabaseMetaData.getSqlStateType();
+    public final int getSQLStateType() throws SQLException {
+        return databaseMetaData.getSQLStateType();
     }
     
     @Override
-    public final boolean locatorsUpdateCopy() {
-        return cachedDatabaseMetaData.isLocatorsUpdateCopy();
+    public final boolean locatorsUpdateCopy() throws SQLException {
+        return databaseMetaData.locatorsUpdateCopy();
     }
     
     @Override
-    public final boolean supportsStatementPooling() {
-        return cachedDatabaseMetaData.isSupportsStatementPooling();
+    public final boolean supportsStatementPooling() throws SQLException {
+        return databaseMetaData.supportsStatementPooling();
     }
     
     @Override
-    public final boolean supportsStoredFunctionsUsingCallSyntax() {
-        return 
cachedDatabaseMetaData.isSupportsStoredFunctionsUsingCallSyntax();
+    public final boolean supportsStoredFunctionsUsingCallSyntax() throws 
SQLException {
+        return databaseMetaData.supportsStoredFunctionsUsingCallSyntax();
     }
     
     @Override
-    public final boolean autoCommitFailureClosesAllResultSets() {
-        return cachedDatabaseMetaData.isAutoCommitFailureClosesAllResultSets();
+    public final boolean autoCommitFailureClosesAllResultSets() throws 
SQLException {
+        return databaseMetaData.autoCommitFailureClosesAllResultSets();
     }
     
     @Override
-    public final RowIdLifetime getRowIdLifetime() {
-        return cachedDatabaseMetaData.getRowIdLifetime();
+    public final RowIdLifetime getRowIdLifetime() throws SQLException {
+        return databaseMetaData.getRowIdLifetime();
     }
     
     @Override
-    public final boolean generatedKeyAlwaysReturned() {
-        return cachedDatabaseMetaData.isGeneratedKeyAlwaysReturned();
+    public final boolean generatedKeyAlwaysReturned() throws SQLException {
+        return databaseMetaData.generatedKeyAlwaysReturned();
     }
     
     @Override
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaData.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaData.java
deleted file mode 100644
index 5ce0d011c93..00000000000
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaData.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.driver.jdbc.context;
-
-import lombok.Getter;
-
-import java.sql.DatabaseMetaData;
-import java.sql.RowIdLifetime;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-
-/**
- * Cached database meta data.
- */
-@Getter
-public final class CachedDatabaseMetaData {
-    
-    private final String url;
-    
-    private final String userName;
-    
-    private final String databaseProductName;
-    
-    private final String databaseProductVersion;
-    
-    private final String driverName;
-    
-    private final String driverVersion;
-    
-    private final int driverMajorVersion;
-    
-    private final int driverMinorVersion;
-    
-    private final int databaseMajorVersion;
-    
-    private final int databaseMinorVersion;
-    
-    private final int jdbcMajorVersion;
-    
-    private final int jdbcMinorVersion;
-    
-    private final boolean isReadOnly;
-    
-    private final boolean allProceduresAreCallable;
-    
-    private final boolean allTablesAreSelectable;
-    
-    private final boolean nullsAreSortedHigh;
-    
-    private final boolean nullsAreSortedLow;
-    
-    private final boolean nullsAreSortedAtStart;
-    
-    private final boolean nullsAreSortedAtEnd;
-    
-    private final boolean usesLocalFiles;
-    
-    private final boolean usesLocalFilePerTable;
-    
-    private final boolean supportsMixedCaseIdentifiers;
-    
-    private final boolean storesUpperCaseIdentifiers;
-    
-    private final boolean storesLowerCaseIdentifiers;
-    
-    private final boolean storesMixedCaseIdentifiers;
-    
-    private final boolean supportsMixedCaseQuotedIdentifiers;
-    
-    private final boolean storesUpperCaseQuotedIdentifiers;
-    
-    private final boolean storesLowerCaseQuotedIdentifiers;
-    
-    private final boolean storesMixedCaseQuotedIdentifiers;
-    
-    private final String identifierQuoteString;
-    
-    private final String sqlKeywords;
-    
-    private final String numericFunctions;
-    
-    private final String stringFunctions;
-    
-    private final String systemFunctions;
-    
-    private final String timeDateFunctions;
-    
-    private final String searchStringEscape;
-    
-    private final String extraNameCharacters;
-    
-    private final boolean supportsAlterTableWithAddColumn;
-    
-    private final boolean supportsAlterTableWithDropColumn;
-    
-    private final boolean supportsColumnAliasing;
-    
-    private final boolean nullPlusNonNullIsNull;
-    
-    private final boolean supportsConvert;
-    
-    private final boolean supportsTableCorrelationNames;
-    
-    private final boolean supportsDifferentTableCorrelationNames;
-    
-    private final boolean supportsExpressionsInOrderBy;
-    
-    private final boolean supportsOrderByUnrelated;
-    
-    private final boolean supportsGroupBy;
-    
-    private final boolean supportsGroupByUnrelated;
-    
-    private final boolean supportsGroupByBeyondSelect;
-    
-    private final boolean supportsLikeEscapeClause;
-    
-    private final boolean supportsMultipleResultSets;
-    
-    private final boolean supportsMultipleTransactions;
-    
-    private final boolean supportsNonNullableColumns;
-    
-    private final boolean supportsMinimumSQLGrammar;
-    
-    private final boolean supportsCoreSQLGrammar;
-    
-    private final boolean supportsExtendedSQLGrammar;
-    
-    private final boolean supportsANSI92EntryLevelSQL;
-    
-    private final boolean supportsANSI92IntermediateSQL;
-    
-    private final boolean supportsANSI92FullSQL;
-    
-    private final boolean supportsIntegrityEnhancementFacility;
-    
-    private final boolean supportsOuterJoins;
-    
-    private final boolean supportsFullOuterJoins;
-    
-    private final boolean supportsLimitedOuterJoins;
-    
-    private final String schemaTerm;
-    
-    private final String procedureTerm;
-    
-    private final String catalogTerm;
-    
-    private final boolean isCatalogAtStart;
-    
-    private final String catalogSeparator;
-    
-    private final boolean supportsSchemasInDataManipulation;
-    
-    private final boolean supportsSchemasInProcedureCalls;
-    
-    private final boolean supportsSchemasInTableDefinitions;
-    
-    private final boolean supportsSchemasInIndexDefinitions;
-    
-    private final boolean supportsSchemasInPrivilegeDefinitions;
-    
-    private final boolean supportsCatalogsInDataManipulation;
-    
-    private final boolean supportsCatalogsInProcedureCalls;
-    
-    private final boolean supportsCatalogsInTableDefinitions;
-    
-    private final boolean supportsCatalogsInIndexDefinitions;
-    
-    private final boolean supportsCatalogsInPrivilegeDefinitions;
-    
-    private final boolean supportsPositionedDelete;
-    
-    private final boolean supportsPositionedUpdate;
-    
-    private final boolean supportsSelectForUpdate;
-    
-    private final boolean supportsStoredProcedures;
-    
-    private final boolean supportsSubqueriesInComparisons;
-    
-    private final boolean supportsSubqueriesInExists;
-    
-    private final boolean supportsSubqueriesInIns;
-    
-    private final boolean supportsSubqueriesInQuantifieds;
-    
-    private final boolean supportsCorrelatedSubqueries;
-    
-    private final boolean supportsUnion;
-    
-    private final boolean supportsUnionAll;
-    
-    private final boolean supportsOpenCursorsAcrossCommit;
-    
-    private final boolean supportsOpenCursorsAcrossRollback;
-    
-    private final boolean supportsOpenStatementsAcrossCommit;
-    
-    private final boolean supportsOpenStatementsAcrossRollback;
-    
-    private final int maxBinaryLiteralLength;
-    
-    private final int maxCharLiteralLength;
-    
-    private final int maxColumnNameLength;
-    
-    private final int maxColumnsInGroupBy;
-    
-    private final int maxColumnsInIndex;
-    
-    private final int maxColumnsInOrderBy;
-    
-    private final int maxColumnsInSelect;
-    
-    private final int maxColumnsInTable;
-    
-    private final int maxConnections;
-    
-    private final int maxCursorNameLength;
-    
-    private final int maxIndexLength;
-    
-    private final int maxSchemaNameLength;
-    
-    private final int maxProcedureNameLength;
-    
-    private final int maxCatalogNameLength;
-    
-    private final int maxRowSize;
-    
-    private final boolean doesMaxRowSizeIncludeBlobs;
-    
-    private final int maxStatementLength;
-    
-    private final int maxStatements;
-    
-    private final int maxTableNameLength;
-    
-    private final int maxTablesInSelect;
-    
-    private final int maxUserNameLength;
-    
-    private final int defaultTransactionIsolation;
-    
-    private final boolean supportsTransactions;
-    
-    private final boolean 
supportsDataDefinitionAndDataManipulationTransactions;
-    
-    private final boolean supportsDataManipulationTransactionsOnly;
-    
-    private final boolean dataDefinitionCausesTransactionCommit;
-    
-    private final boolean dataDefinitionIgnoredInTransactions;
-    
-    private final boolean supportsBatchUpdates;
-    
-    private final boolean supportsSavepoints;
-    
-    private final boolean supportsNamedParameters;
-    
-    private final boolean supportsMultipleOpenResults;
-    
-    private final boolean supportsGetGeneratedKeys;
-    
-    private final int resultSetHoldability;
-    
-    private final int sqlStateType;
-    
-    private final boolean locatorsUpdateCopy;
-    
-    private final boolean supportsStatementPooling;
-    
-    private final boolean supportsStoredFunctionsUsingCallSyntax;
-    
-    private final boolean autoCommitFailureClosesAllResultSets;
-    
-    private final RowIdLifetime rowIdLifetime;
-    
-    private final boolean generatedKeyAlwaysReturned;
-    
-    public CachedDatabaseMetaData(final DatabaseMetaData databaseMetaData) 
throws SQLException {
-        url = databaseMetaData.getURL();
-        userName = databaseMetaData.getUserName();
-        databaseProductName = databaseMetaData.getDatabaseProductName();
-        databaseProductVersion = databaseMetaData.getDatabaseProductVersion();
-        driverName = databaseMetaData.getDriverName();
-        driverVersion = databaseMetaData.getDriverVersion();
-        driverMajorVersion = databaseMetaData.getDriverMajorVersion();
-        driverMinorVersion = databaseMetaData.getDriverMinorVersion();
-        databaseMajorVersion = databaseMetaData.getDatabaseMajorVersion();
-        databaseMinorVersion = databaseMetaData.getDatabaseMinorVersion();
-        jdbcMajorVersion = databaseMetaData.getJDBCMajorVersion();
-        jdbcMinorVersion = databaseMetaData.getJDBCMinorVersion();
-        isReadOnly = databaseMetaData.isReadOnly();
-        allProceduresAreCallable = databaseMetaData.allProceduresAreCallable();
-        allTablesAreSelectable = databaseMetaData.allTablesAreSelectable();
-        nullsAreSortedHigh = databaseMetaData.nullsAreSortedHigh();
-        nullsAreSortedLow = databaseMetaData.nullsAreSortedLow();
-        nullsAreSortedAtStart = databaseMetaData.nullsAreSortedAtStart();
-        nullsAreSortedAtEnd = databaseMetaData.nullsAreSortedAtEnd();
-        usesLocalFiles = databaseMetaData.usesLocalFiles();
-        usesLocalFilePerTable = databaseMetaData.usesLocalFilePerTable();
-        supportsMixedCaseIdentifiers = 
databaseMetaData.supportsMixedCaseIdentifiers();
-        storesUpperCaseIdentifiers = 
databaseMetaData.storesUpperCaseIdentifiers();
-        storesLowerCaseIdentifiers = 
databaseMetaData.storesLowerCaseIdentifiers();
-        storesMixedCaseIdentifiers = 
databaseMetaData.storesMixedCaseIdentifiers();
-        supportsMixedCaseQuotedIdentifiers = 
databaseMetaData.supportsMixedCaseQuotedIdentifiers();
-        storesUpperCaseQuotedIdentifiers = 
databaseMetaData.storesUpperCaseQuotedIdentifiers();
-        storesLowerCaseQuotedIdentifiers = 
databaseMetaData.storesLowerCaseQuotedIdentifiers();
-        storesMixedCaseQuotedIdentifiers = 
databaseMetaData.storesMixedCaseQuotedIdentifiers();
-        identifierQuoteString = databaseMetaData.getIdentifierQuoteString();
-        sqlKeywords = databaseMetaData.getSQLKeywords();
-        numericFunctions = databaseMetaData.getNumericFunctions();
-        stringFunctions = databaseMetaData.getStringFunctions();
-        systemFunctions = databaseMetaData.getSystemFunctions();
-        timeDateFunctions = databaseMetaData.getTimeDateFunctions();
-        searchStringEscape = databaseMetaData.getSearchStringEscape();
-        extraNameCharacters = databaseMetaData.getExtraNameCharacters();
-        supportsAlterTableWithAddColumn = 
databaseMetaData.supportsAlterTableWithAddColumn();
-        supportsAlterTableWithDropColumn = 
databaseMetaData.supportsAlterTableWithDropColumn();
-        supportsColumnAliasing = databaseMetaData.supportsColumnAliasing();
-        nullPlusNonNullIsNull = databaseMetaData.nullPlusNonNullIsNull();
-        supportsConvert = databaseMetaData.supportsConvert();
-        supportsTableCorrelationNames = 
databaseMetaData.supportsTableCorrelationNames();
-        supportsDifferentTableCorrelationNames = 
databaseMetaData.supportsDifferentTableCorrelationNames();
-        supportsExpressionsInOrderBy = 
databaseMetaData.supportsExpressionsInOrderBy();
-        supportsOrderByUnrelated = databaseMetaData.supportsOrderByUnrelated();
-        supportsGroupBy = databaseMetaData.supportsGroupBy();
-        supportsGroupByUnrelated = databaseMetaData.supportsGroupByUnrelated();
-        supportsGroupByBeyondSelect = 
databaseMetaData.supportsGroupByBeyondSelect();
-        supportsLikeEscapeClause = databaseMetaData.supportsLikeEscapeClause();
-        supportsMultipleResultSets = 
databaseMetaData.supportsMultipleResultSets();
-        supportsMultipleTransactions = 
databaseMetaData.supportsMultipleTransactions();
-        supportsNonNullableColumns = 
databaseMetaData.supportsNonNullableColumns();
-        supportsMinimumSQLGrammar = 
databaseMetaData.supportsMinimumSQLGrammar();
-        supportsCoreSQLGrammar = databaseMetaData.supportsCoreSQLGrammar();
-        supportsExtendedSQLGrammar = 
databaseMetaData.supportsExtendedSQLGrammar();
-        supportsANSI92EntryLevelSQL = 
databaseMetaData.supportsANSI92EntryLevelSQL();
-        supportsANSI92IntermediateSQL = 
databaseMetaData.supportsANSI92IntermediateSQL();
-        supportsANSI92FullSQL = databaseMetaData.supportsANSI92FullSQL();
-        supportsIntegrityEnhancementFacility = 
databaseMetaData.supportsIntegrityEnhancementFacility();
-        supportsOuterJoins = databaseMetaData.supportsOuterJoins();
-        supportsFullOuterJoins = databaseMetaData.supportsFullOuterJoins();
-        supportsLimitedOuterJoins = 
databaseMetaData.supportsLimitedOuterJoins();
-        schemaTerm = databaseMetaData.getSchemaTerm();
-        procedureTerm = databaseMetaData.getProcedureTerm();
-        catalogTerm = databaseMetaData.getCatalogTerm();
-        isCatalogAtStart = databaseMetaData.isCatalogAtStart();
-        catalogSeparator = databaseMetaData.getCatalogSeparator();
-        supportsSchemasInDataManipulation = 
databaseMetaData.supportsSchemasInDataManipulation();
-        supportsSchemasInProcedureCalls = 
databaseMetaData.supportsSchemasInProcedureCalls();
-        supportsSchemasInTableDefinitions = 
databaseMetaData.supportsSchemasInTableDefinitions();
-        supportsSchemasInIndexDefinitions = 
databaseMetaData.supportsSchemasInIndexDefinitions();
-        supportsSchemasInPrivilegeDefinitions = 
databaseMetaData.supportsSchemasInPrivilegeDefinitions();
-        supportsCatalogsInDataManipulation = 
databaseMetaData.supportsCatalogsInDataManipulation();
-        supportsCatalogsInProcedureCalls = 
databaseMetaData.supportsCatalogsInProcedureCalls();
-        supportsCatalogsInTableDefinitions = 
databaseMetaData.supportsCatalogsInTableDefinitions();
-        supportsCatalogsInIndexDefinitions = 
databaseMetaData.supportsCatalogsInIndexDefinitions();
-        supportsCatalogsInPrivilegeDefinitions = 
databaseMetaData.supportsCatalogsInPrivilegeDefinitions();
-        supportsPositionedDelete = databaseMetaData.supportsPositionedDelete();
-        supportsPositionedUpdate = databaseMetaData.supportsPositionedUpdate();
-        supportsSelectForUpdate = databaseMetaData.supportsSelectForUpdate();
-        supportsStoredProcedures = databaseMetaData.supportsStoredProcedures();
-        supportsSubqueriesInComparisons = 
databaseMetaData.supportsSubqueriesInComparisons();
-        supportsSubqueriesInExists = 
databaseMetaData.supportsSubqueriesInExists();
-        supportsSubqueriesInIns = databaseMetaData.supportsSubqueriesInIns();
-        supportsSubqueriesInQuantifieds = 
databaseMetaData.supportsSubqueriesInQuantifieds();
-        supportsCorrelatedSubqueries = 
databaseMetaData.supportsCorrelatedSubqueries();
-        supportsUnion = databaseMetaData.supportsUnion();
-        supportsUnionAll = databaseMetaData.supportsUnionAll();
-        supportsOpenCursorsAcrossCommit = 
databaseMetaData.supportsOpenCursorsAcrossCommit();
-        supportsOpenCursorsAcrossRollback = 
databaseMetaData.supportsOpenCursorsAcrossRollback();
-        supportsOpenStatementsAcrossCommit = 
databaseMetaData.supportsOpenStatementsAcrossCommit();
-        supportsOpenStatementsAcrossRollback = 
databaseMetaData.supportsOpenStatementsAcrossRollback();
-        maxBinaryLiteralLength = databaseMetaData.getMaxBinaryLiteralLength();
-        maxCharLiteralLength = databaseMetaData.getMaxCharLiteralLength();
-        maxColumnNameLength = databaseMetaData.getMaxColumnNameLength();
-        maxColumnsInGroupBy = databaseMetaData.getMaxColumnsInGroupBy();
-        maxColumnsInIndex = databaseMetaData.getMaxColumnsInIndex();
-        maxColumnsInOrderBy = databaseMetaData.getMaxColumnsInOrderBy();
-        maxColumnsInSelect = databaseMetaData.getMaxColumnsInSelect();
-        maxColumnsInTable = databaseMetaData.getMaxColumnsInTable();
-        maxConnections = databaseMetaData.getMaxConnections();
-        maxCursorNameLength = databaseMetaData.getMaxCursorNameLength();
-        maxIndexLength = databaseMetaData.getMaxIndexLength();
-        maxSchemaNameLength = databaseMetaData.getMaxSchemaNameLength();
-        maxProcedureNameLength = databaseMetaData.getMaxProcedureNameLength();
-        maxCatalogNameLength = databaseMetaData.getMaxCatalogNameLength();
-        maxRowSize = databaseMetaData.getMaxRowSize();
-        doesMaxRowSizeIncludeBlobs = 
databaseMetaData.doesMaxRowSizeIncludeBlobs();
-        maxStatementLength = databaseMetaData.getMaxStatementLength();
-        maxStatements = databaseMetaData.getMaxStatements();
-        maxTableNameLength = databaseMetaData.getMaxTableNameLength();
-        maxTablesInSelect = databaseMetaData.getMaxTablesInSelect();
-        maxUserNameLength = databaseMetaData.getMaxUserNameLength();
-        defaultTransactionIsolation = 
databaseMetaData.getDefaultTransactionIsolation();
-        supportsTransactions = databaseMetaData.supportsTransactions();
-        supportsDataDefinitionAndDataManipulationTransactions = 
databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions();
-        supportsDataManipulationTransactionsOnly = 
databaseMetaData.supportsDataManipulationTransactionsOnly();
-        dataDefinitionCausesTransactionCommit = 
databaseMetaData.dataDefinitionCausesTransactionCommit();
-        dataDefinitionIgnoredInTransactions = 
databaseMetaData.dataDefinitionIgnoredInTransactions();
-        supportsBatchUpdates = databaseMetaData.supportsBatchUpdates();
-        supportsSavepoints = databaseMetaData.supportsSavepoints();
-        supportsNamedParameters = databaseMetaData.supportsNamedParameters();
-        supportsMultipleOpenResults = 
databaseMetaData.supportsMultipleOpenResults();
-        supportsGetGeneratedKeys = databaseMetaData.supportsGetGeneratedKeys();
-        resultSetHoldability = databaseMetaData.getResultSetHoldability();
-        sqlStateType = databaseMetaData.getSQLStateType();
-        locatorsUpdateCopy = databaseMetaData.locatorsUpdateCopy();
-        supportsStatementPooling = databaseMetaData.supportsStatementPooling();
-        supportsStoredFunctionsUsingCallSyntax = 
databaseMetaData.supportsStoredFunctionsUsingCallSyntax();
-        autoCommitFailureClosesAllResultSets = 
databaseMetaData.autoCommitFailureClosesAllResultSets();
-        rowIdLifetime = getRowIdLifetimeFromOriginMetaData(databaseMetaData);
-        generatedKeyAlwaysReturned = 
isGeneratedKeyAlwaysReturned(databaseMetaData);
-    }
-    
-    private RowIdLifetime getRowIdLifetimeFromOriginMetaData(final 
DatabaseMetaData databaseMetaData) throws SQLException {
-        try {
-            return databaseMetaData.getRowIdLifetime();
-        } catch (final SQLFeatureNotSupportedException ignore) {
-            return RowIdLifetime.ROWID_UNSUPPORTED;
-        }
-    }
-    
-    private boolean isGeneratedKeyAlwaysReturned(final DatabaseMetaData 
databaseMetaData) throws SQLException {
-        try {
-            return databaseMetaData.generatedKeyAlwaysReturned();
-        } catch (final AbstractMethodError ignored) {
-            return false;
-        }
-    }
-}
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContext.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContext.java
deleted file mode 100644
index e312f9d1a35..00000000000
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContext.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.driver.jdbc.context;
-
-import com.google.common.eventbus.Subscribe;
-import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
-import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * JDBC context.
- */
-public final class JDBCContext {
-    
-    private final AtomicReference<CachedDatabaseMetaData> 
cachedDatabaseMetaData = new AtomicReference<>();
-    
-    public JDBCContext(final Map<String, DataSource> dataSources) throws 
SQLException {
-        
cachedDatabaseMetaData.set(createCachedDatabaseMetaData(dataSources).orElse(null));
-    }
-    
-    /**
-     * Get cached database meta data.
-     * 
-     * @return cached database meta data
-     */
-    public CachedDatabaseMetaData getCachedDatabaseMetaData() {
-        return cachedDatabaseMetaData.get();
-    }
-    
-    /**
-     * Refresh cached database meta data.
-     * 
-     * @param event data source changed event
-     * @throws SQLException SQL exception
-     */
-    @SuppressWarnings("UnstableApiUsage")
-    @Subscribe
-    public void refreshCachedDatabaseMetaData(final DataSourceChangedEvent 
event) throws SQLException {
-        
cachedDatabaseMetaData.set(createCachedDatabaseMetaData(DataSourcePoolCreator.create(event.getDataSourcePropertiesMap())).orElse(null));
-    }
-    
-    private Optional<CachedDatabaseMetaData> 
createCachedDatabaseMetaData(final Map<String, DataSource> dataSources) throws 
SQLException {
-        if (dataSources.isEmpty()) {
-            return Optional.empty();
-        }
-        try (Connection connection = 
dataSources.values().iterator().next().getConnection()) {
-            return Optional.of(new 
CachedDatabaseMetaData(connection.getMetaData()));
-        }
-    }
-}
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index 902d83534b6..f538478a79a 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.driver.jdbc.core.connection;
 
 import lombok.Getter;
 import org.apache.shardingsphere.driver.jdbc.adapter.AbstractConnectionAdapter;
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.datasource.metadata.ShardingSphereDatabaseMetaData;
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement;
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement;
@@ -48,9 +47,6 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     @Getter
     private final ContextManager contextManager;
     
-    @Getter
-    private final JDBCContext jdbcContext;
-    
     @Getter
     private final DriverDatabaseConnectionManager databaseConnectionManager;
     
@@ -62,10 +58,9 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     
     private volatile boolean closed;
     
-    public ShardingSphereConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
+    public ShardingSphereConnection(final String databaseName, final 
ContextManager contextManager) {
         this.databaseName = databaseName;
         this.contextManager = contextManager;
-        this.jdbcContext = jdbcContext;
         databaseConnectionManager = new 
DriverDatabaseConnectionManager(databaseName, contextManager);
     }
     
@@ -79,7 +74,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     }
     
     @Override
-    public DatabaseMetaData getMetaData() {
+    public DatabaseMetaData getMetaData() throws SQLException {
         return new ShardingSphereDatabaseMetaData(this);
     }
     
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
index 985f6bc074a..8a4bffa8bbb 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.driver.jdbc.core.datasource;
 
 import org.apache.shardingsphere.driver.jdbc.adapter.AbstractDataSourceAdapter;
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import org.apache.shardingsphere.driver.state.DriverStateContext;
 import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
@@ -54,12 +53,9 @@ public final class ShardingSphereDataSource extends 
AbstractDataSourceAdapter im
     
     private final ContextManager contextManager;
     
-    private final JDBCContext jdbcContext;
-    
     public ShardingSphereDataSource(final String databaseName, final 
ModeConfiguration modeConfig) throws SQLException {
         this.databaseName = databaseName;
         contextManager = createContextManager(databaseName, modeConfig, new 
LinkedHashMap<>(), new LinkedList<>(), new Properties());
-        jdbcContext = new 
JDBCContext(contextManager.getDataSourceMap(databaseName));
         contextManagerInitializedCallback(databaseName, contextManager);
     }
     
@@ -67,7 +63,6 @@ public final class ShardingSphereDataSource extends 
AbstractDataSourceAdapter im
                                     final Collection<RuleConfiguration> 
ruleConfigs, final Properties props) throws SQLException {
         this.databaseName = databaseName;
         contextManager = createContextManager(databaseName, modeConfig, 
dataSourceMap, ruleConfigs, null == props ? new Properties() : props);
-        jdbcContext = new 
JDBCContext(contextManager.getDataSourceMap(databaseName));
         contextManagerInitializedCallback(databaseName, contextManager);
     }
     
@@ -95,7 +90,7 @@ public final class ShardingSphereDataSource extends 
AbstractDataSourceAdapter im
     
     @Override
     public Connection getConnection() {
-        return DriverStateContext.getConnection(databaseName, contextManager, 
jdbcContext);
+        return DriverStateContext.getConnection(databaseName, contextManager);
     }
     
     @Override
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
index 10d05ab4c05..cd63fea1119 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
@@ -48,8 +48,8 @@ public final class ShardingSphereDatabaseMetaData extends 
AdaptedDatabaseMetaDat
     
     private DatabaseMetaData currentDatabaseMetaData;
     
-    public ShardingSphereDatabaseMetaData(final ShardingSphereConnection 
connection) {
-        super(connection.getJdbcContext().getCachedDatabaseMetaData());
+    public ShardingSphereDatabaseMetaData(final ShardingSphereConnection 
connection) throws SQLException {
+        
super(connection.getDatabaseConnectionManager().getRandomConnection().getMetaData());
         this.connection = connection;
         rules = 
connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules();
     }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverState.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverState.java
index d2334302fc7..6e0322b05c8 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverState.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverState.java
@@ -17,10 +17,9 @@
 
 package org.apache.shardingsphere.driver.state;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
-import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 
 import java.sql.Connection;
 
@@ -35,8 +34,7 @@ public interface DriverState extends TypedSPI {
      *
      * @param databaseName database name
      * @param contextManager context manager
-     * @param jdbcContext JDBC context
      * @return connection
      */
-    Connection getConnection(String databaseName, ContextManager 
contextManager, JDBCContext jdbcContext);
+    Connection getConnection(String databaseName, ContextManager 
contextManager);
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverStateContext.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverStateContext.java
index ed621c78d2a..e4cab515d41 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverStateContext.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/DriverStateContext.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.driver.state;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 
@@ -36,11 +35,10 @@ public final class DriverStateContext {
      *
      * @param databaseName database name
      * @param contextManager context manager
-     * @param jdbcContext JDBC context
      * @return connection
      */
-    public static Connection getConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
+    public static Connection getConnection(final String databaseName, final 
ContextManager contextManager) {
         return TypedSPILoader.getService(
-                DriverState.class, 
contextManager.getInstanceContext().getInstance().getState().getCurrentState().name()).getConnection(databaseName,
 contextManager, jdbcContext);
+                DriverState.class, 
contextManager.getInstanceContext().getInstance().getState().getCurrentState().name()).getConnection(databaseName,
 contextManager);
     }
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverState.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverState.java
index ef77cda049f..aeba242c0b3 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverState.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverState.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state.circuit;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import org.apache.shardingsphere.driver.state.DriverState;
 import 
org.apache.shardingsphere.driver.state.circuit.datasource.CircuitBreakerDataSource;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -30,7 +29,7 @@ import java.sql.Connection;
 public final class CircuitBreakDriverState implements DriverState {
     
     @Override
-    public Connection getConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
+    public Connection getConnection(final String databaseName, final 
ContextManager contextManager) {
         return new CircuitBreakerDataSource().getConnection();
     }
     
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/lock/LockDriverState.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/lock/LockDriverState.java
index 4df8be32ccc..e2ac2020c02 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/lock/LockDriverState.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/lock/LockDriverState.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state.lock;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import org.apache.shardingsphere.driver.state.DriverState;
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -30,7 +29,7 @@ import java.sql.Connection;
 public final class LockDriverState implements DriverState {
     
     @Override
-    public Connection getConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
+    public Connection getConnection(final String databaseName, final 
ContextManager contextManager) {
         // TODO
         throw new UnsupportedSQLOperationException("LockDriverState");
     }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/ok/OKDriverState.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/ok/OKDriverState.java
index 13b31ad35e4..f2dc10227ee 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/ok/OKDriverState.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/state/ok/OKDriverState.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state.ok;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.driver.state.DriverState;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -30,8 +29,8 @@ import java.sql.Connection;
 public final class OKDriverState implements DriverState {
     
     @Override
-    public Connection getConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
-        return new ShardingSphereConnection(databaseName, contextManager, 
jdbcContext);
+    public Connection getConnection(final String databaseName, final 
ContextManager contextManager) {
+        return new ShardingSphereConnection(databaseName, contextManager);
     }
     
     @Override
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
index 1a5a5f973eb..6a61def94d1 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.driver.executor.batch;
 
 import lombok.SneakyThrows;
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -90,7 +89,7 @@ class BatchPreparedStatementExecutorTest {
     @BeforeEach
     void setUp() {
         SQLExecutorExceptionHandler.setExceptionThrown(true);
-        ShardingSphereConnection connection = new 
ShardingSphereConnection("foo_db", mockContextManager(), 
mock(JDBCContext.class));
+        ShardingSphereConnection connection = new 
ShardingSphereConnection("foo_db", mockContextManager());
         executor = new BatchPreparedStatementExecutor(
                 connection.getContextManager().getMetaDataContexts(), new 
JDBCExecutor(executorEngine, 
connection.getDatabaseConnectionManager().getConnectionContext()), "foo_db");
         
when(sqlStatementContext.getTablesContext()).thenReturn(mock(TablesContext.class));
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
index 9a95f919c45..74dc5e0f201 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.jdbc.adapter;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -101,6 +100,6 @@ class ConnectionAdapterTest {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
                 new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()))));
-        return new ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
contextManager, mock(JDBCContext.class));
+        return new ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
contextManager);
     }
 }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaDataTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaDataTest.java
deleted file mode 100644
index b01c300809e..00000000000
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/CachedDatabaseMetaDataTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.driver.jdbc.context;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import java.sql.DatabaseMetaData;
-import java.sql.RowIdLifetime;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-class CachedDatabaseMetaDataTest {
-    
-    @Mock
-    private DatabaseMetaData databaseMetaData;
-    
-    @Test
-    void assertGetRowIdLifetimeFromOriginMetaData() throws SQLException {
-        RowIdLifetime rowIdLifetime = mock(RowIdLifetime.class);
-        when(databaseMetaData.getRowIdLifetime()).thenReturn(rowIdLifetime);
-        assertThat(new 
CachedDatabaseMetaData(databaseMetaData).getRowIdLifetime(), is(rowIdLifetime));
-    }
-    
-    @Test
-    void assertGetRowIdLifetimeFromOriginMetaDataWhenNotSupported() throws 
SQLException {
-        
when(databaseMetaData.getRowIdLifetime()).thenThrow(SQLFeatureNotSupportedException.class);
-        assertThat(new 
CachedDatabaseMetaData(databaseMetaData).getRowIdLifetime(), 
is(RowIdLifetime.ROWID_UNSUPPORTED));
-    }
-    
-    @Test
-    void assertIsGeneratedKeyAlwaysReturned() throws SQLException {
-        when(databaseMetaData.generatedKeyAlwaysReturned()).thenReturn(true);
-        assertTrue(new 
CachedDatabaseMetaData(databaseMetaData).isGeneratedKeyAlwaysReturned());
-    }
-    
-    @Test
-    void assertIsGeneratedKeyAlwaysReturnedWhenNotSupported() throws 
SQLException {
-        
when(databaseMetaData.generatedKeyAlwaysReturned()).thenThrow(AbstractMethodError.class);
-        assertFalse(new 
CachedDatabaseMetaData(databaseMetaData).isGeneratedKeyAlwaysReturned());
-    }
-}
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContextTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContextTest.java
deleted file mode 100644
index fef2f2240ae..00000000000
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/context/JDBCContextTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.driver.jdbc.context;
-
-import 
org.apache.shardingsphere.driver.state.circuit.datasource.CircuitBreakerDataSource;
-import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import java.sql.SQLException;
-import java.util.Collections;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.mockito.Mockito.mock;
-
-@ExtendWith(MockitoExtension.class)
-class JDBCContextTest {
-    
-    @Test
-    void assertGetCachedDatabaseMetaDataForNullValue() throws Exception {
-        assertNull(new 
JDBCContext(Collections.emptyMap()).getCachedDatabaseMetaData());
-    }
-    
-    @Test
-    void assertGetCachedDatabaseMetaDataForSingleValue() throws SQLException {
-        assertNotNull(new JDBCContext(Collections.singletonMap("foo_db", new 
CircuitBreakerDataSource())).getCachedDatabaseMetaData());
-    }
-    
-    @Test
-    void assertGetCachedDatabaseMetaDataAfterRefreshingExisting() throws 
SQLException {
-        JDBCContext jdbcContext = new 
JDBCContext(Collections.singletonMap("foo_db", new CircuitBreakerDataSource()));
-        
jdbcContext.refreshCachedDatabaseMetaData(mock(DataSourceChangedEvent.class));
-        assertNull(jdbcContext.getCachedDatabaseMetaData());
-    }
-}
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
index e23aa72a6ba..c49702b361c 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.driver.jdbc.core.connection;
 
 import lombok.SneakyThrows;
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -59,7 +58,7 @@ class ShardingSphereConnectionTest {
     
     @BeforeEach
     void setUp() {
-        connection = new ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(), mock(JDBCContext.class));
+        connection = new ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager());
     }
     
     private ContextManager mockContextManager() {
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 5dd5de72c59..8ab9e106212 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.jdbc.core.datasource.metadata;
 
-import org.apache.shardingsphere.driver.jdbc.context.CachedDatabaseMetaData;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import 
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
@@ -98,8 +97,6 @@ class ShardingSphereDatabaseMetaDataTest {
         
when(shardingSphereConnection.getDatabaseName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(metaDataContexts.getMetaData().getDatabase(shardingSphereConnection.getDatabaseName())).thenReturn(database);
-        CachedDatabaseMetaData cachedDatabaseMetaData = new 
CachedDatabaseMetaData(databaseMetaData);
-        
when(shardingSphereConnection.getJdbcContext().getCachedDatabaseMetaData()).thenReturn(cachedDatabaseMetaData);
         ShardingRule shardingRule = mockShardingRule();
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(shardingRule));
         shardingSphereDatabaseMetaData = new 
ShardingSphereDatabaseMetaData(shardingSphereConnection);
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
index d274f8d02b8..72b4e6e8547 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.jdbc.unsupported;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -44,7 +43,7 @@ class UnsupportedOperationConnectionTest {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
                 new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class))));
-        shardingSphereConnection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, contextManager, 
mock(JDBCContext.class));
+        shardingSphereConnection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, contextManager);
     }
     
     @Test
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
index 9a1338a5d15..8bac618b858 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
@@ -80,7 +79,7 @@ class DriverStateContextTest {
     
     @Test
     void assertGetConnectionWithOkState() {
-        Connection actual = 
DriverStateContext.getConnection(DefaultDatabase.LOGIC_NAME, contextManager, 
mock(JDBCContext.class));
+        Connection actual = 
DriverStateContext.getConnection(DefaultDatabase.LOGIC_NAME, contextManager);
         assertThat(actual, instanceOf(ShardingSphereConnection.class));
     }
 }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverStateTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverStateTest.java
index aba94f7e358..53acbc0af75 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverStateTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/circuit/CircuitBreakDriverStateTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state.circuit;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.state.circuit.connection.CircuitBreakerConnection;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -34,7 +33,7 @@ class CircuitBreakDriverStateTest {
     
     @Test
     void assertGetConnection() {
-        Connection actual = new 
CircuitBreakDriverState().getConnection(DefaultDatabase.LOGIC_NAME, 
mock(ContextManager.class, RETURNS_DEEP_STUBS), mock(JDBCContext.class));
+        Connection actual = new 
CircuitBreakDriverState().getConnection(DefaultDatabase.LOGIC_NAME, 
mock(ContextManager.class, RETURNS_DEEP_STUBS));
         assertThat(actual, instanceOf(CircuitBreakerConnection.class));
     }
 }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
index 7e0dec717dd..d148cd575c1 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.state.ok;
 
-import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -42,7 +41,7 @@ class OKDriverStateTest {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
                 .thenReturn(new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class))));
-        Connection actual = new 
OKDriverState().getConnection(DefaultDatabase.LOGIC_NAME, contextManager, 
mock(JDBCContext.class));
+        Connection actual = new 
OKDriverState().getConnection(DefaultDatabase.LOGIC_NAME, contextManager);
         assertThat(actual, instanceOf(ShardingSphereConnection.class));
     }
 }


Reply via email to