private Statement generateStatement(final String sql, final String dataSourceName) throws SQLException { HashCode hashCode = Hashing.md5() .newHasher() .putString(sql, Charsets.UTF_8) .putString(dataSourceName, Charsets.UTF_8) .hash(); if (cachedRoutedStatements.containsKey(hashCode)) { return cachedRoutedStatements.get(hashCode); } Connection connection = shardingConnection.getConnection(dataSourceName); Statement result; if (0 == resultSetHoldability) { result = connection.createStatement(resultSetType, resultSetConcurrency); } else { result = connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); } replayMethodsInvocation(result); cachedRoutedStatements.put(hashCode, result); return result; }