public static Map<ClickHouseOption, Serializable> toClientOptions(Properties props) {
        if (props == null || props.isEmpty()) {
            return Collections.emptyMap();
        }

        Map<ClickHouseOption, Serializable> options = new HashMap<>();
        for (Entry<Object, Object> e : props.entrySet()) {
            if (e.getKey() == null || e.getValue() == null) {
                continue;
            }

            String key = e.getKey().toString();
            ClickHouseOption o = ClickHouseClientOption.fromKey(key);
            if (o == null) {
                o = clientSpecificOptions.get(key);
            }

            if (o != null) {
                options.put(o, ClickHouseOption.fromString(e.getValue().toString(), o.getValueType()));
            }
        }
        return options;
    }
JDBC driver for ClickHouse. It takes a connection string like below for
connecting to ClickHouse server:
{@code jdbc:(ch|clickhouse)[:<protocol>]://[<user>[:<password>]@]<host>[:<port>][/<db>][?<parameter=value>,[<parameter=value]]][#<tag>[,<tag>]]}

<p>
For examples:
<ul>
<li>{@code jdbc:clickhouse://localhost:8123/system}</li>
<li>{@code jdbc:clickhouse://admin:password@localhost/system?socket_time=30}</li>
<li>{@code jdbc:clickhouse://localhost/system?protocol=grpc}</li>
</ul>
clickhouse-jdbc/src/main/java/com/clickhouse/jdbc/DriverV1.java