code: private static void parseInternal(UrlParser urlParser, String url, Properties properties)
        throws SQLException {
      try {
        urlParser.initialUrl = url;
        int separator = url.indexOf("//");
        if (separator == -1) {
          throw new IllegalArgumentException(
              "url parsing error : '//' is not present in the url " + url);
        }
  
        urlParser.haMode = parseHaMode(url, separator);
  
        String urlSecondPart = url.substring(separator + 2);
        int dbIndex = urlSecondPart.indexOf("/");
        int paramIndex = urlSecondPart.indexOf("?");
  
        String hostAddressesString;
        String additionalParameters;
        if ((dbIndex < paramIndex && dbIndex < 0) || (dbIndex > paramIndex && paramIndex > -1)) {
          hostAddressesString = urlSecondPart.substring(0, paramIndex);
          additionalParameters = urlSecondPart.substring(paramIndex);
        } else if ((dbIndex < paramIndex && dbIndex > -1) || (dbIndex > paramIndex
            && paramIndex < 0)) {
          hostAddressesString = urlSecondPart.substring(0, dbIndex);
          additionalParameters = urlSecondPart.substring(dbIndex);
        } else {
          hostAddressesString = urlSecondPart;
          additionalParameters = null;
        }
  
        defineUrlParserParameters(urlParser, properties, hostAddressesString, additionalParameters);
        setDefaultHostAddressType(urlParser);
        urlParser.loadMultiMasterValue();
      } catch (IllegalArgumentException i) {
        throw new SQLException("error parsing url : " + i.getMessage(), i);
      }
    }
docs: Parses the connection URL in order to set the UrlParser instance with all the information
  provided through the URL.
  
  @param urlParser  object instance in which all data from the connection url is stored
  @param url        connection URL
  @param properties properties
  @throws SQLException if format is incorrect