public Connection createConnection(String queryString, Properties info)
        throws SQLException, NoDriverFoundException {
        Properties properties = new Properties(info);
        properties.put("user", this.getUsername());
        properties.put("password", this.getPassword());
        final String url = constructUrlForConnection(queryString);

        final Driver jdbcDriverInstance = getJdbcDriverInstance();

        SQLException lastException = null;
        try {
            long start = System.nanoTime();
            // give up if we hit the time limit or the container stops running for some reason
            while ((System.nanoTime() - start < TimeUnit.SECONDS.toNanos(connectTimeoutSeconds)) && isRunning()) {
                try {
                    logger()
                        .debug(
                            "Trying to create JDBC connection using {} to {} with properties: {}",
                            jdbcDriverInstance.getClass().getName(),
                            url,
                            properties
                        );

                    return jdbcDriverInstance.connect(url, properties);
                } catch (SQLException e) {
                    lastException = e;
                    Thread.sleep(100L);
                }
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        throw new SQLException("Could not create new connection", lastException);
    }
Creates a connection to the underlying containerized database instance.

@param queryString query string parameters that should be appended to the JDBC connection URL.
                   The '?' character must be included
@param info  additional properties to be passed to the JDBC driver
@return a Connection
@throws SQLException if there is a repeated failure to create the connection
modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java