# Presto 316 Documentation

## 2.3. JDBC Driver

Presto can be accessed from Java using the JDBC driver. Download presto-jdbc-316.jar and add it to the class path of your Java application.

The driver is also available from Maven Central:

    <dependency>
        <groupId>io.prestosql</groupId>
        <artifactId>presto-jdbc</artifactId>
        <version>316</version>
    </dependency>

## Driver Name

The driver class name is `io.prestosql.jdbc.PrestoDriver`. Most users will not need this information as drivers are loaded automatically.

## Connecting

The following JDBC URL formats are supported:

    jdbc:presto://host:port
    jdbc:presto://host:port/catalog
    jdbc:presto://host:port/catalog/schema

For example, use the following URL to connect to Presto running on `example.net` port `8080` with the catalog `hive` and the schema `sales`:

    jdbc:presto://example.net:8080/hive/sales

The above URL can be used as follows to create a connection:

    String url = "jdbc:presto://example.net:8080/hive/sales";
    Connection connection = DriverManager.getConnection(url, "test", null);

## Connection Parameters

The driver supports various parameters that may be set as URL parameters or as properties passed to `DriverManager`. Both of the following examples are equivalent:

    // URL parameters
    String url = "jdbc:presto://example.net:8080/hive/sales";
    Properties properties = new Properties();
    properties.setProperty("user", "test");
    properties.setProperty("password", "secret");
    properties.setProperty("SSL", "true");
    Connection connection = DriverManager.getConnection(url, properties);

    // properties
    String url = "jdbc:presto://example.net:8080/hive/sales?user=test&password=secret&SSL=true";
    Connection connection = DriverManager.getConnection(url);

These methods may be mixed; some parameters may be specified in the URL while others are specified using properties. However, the same parameter may not be specified using both methods.

## Parameter Reference

Name | Description
--- | ---
`user` | Username to use for authentication and authorization.
`password` | Password to use for LDAP authentication.
`socksProxy` | SOCKS proxy host and port. Example: `localhost:1080`
`httpProxy` | HTTP proxy host and port. Example: `localhost:8888`
`applicationNamePrefix` | Prefix to append to any specified `ApplicationName` client info property, which is used to set the source name for the Presto query. If neither this property nor `ApplicationName` are set, the source for the query will be `presto-jdbc`.
`accessToken` | Access token for token based authentication.
`SSL` | Use HTTPS for connections
`SSLKeyStorePath` | The location of the Java KeyStore file that contains the certificate and private key to use for authentication.
`SSLKeyStorePassword` | The password for the KeyStore.
`SSLTrustStorePath` | The location of the Java TrustStore file that will be used to validate HTTPS server certificates.
`SSLTrustStorePassword` | The password for the TrustStore.
`KerberosRemoteServiceName` | Presto coordinator Kerberos service name. This parameter is required for Kerberos authentication.
`KerberosPrincipal` | The principal to use when authenticating to the Presto coordinator.
`KerberosUseCanonicalHostname` | Use the canonical hostname of the Presto coordinator for the Kerberos service principal by first resolving the hostname to an IP address and then doing a reverse DNS lookup for that IP address. This is enabled by default.
`KerberosServicePrincipalPattern` | Presto coordinator Kerberos service principal pattern. The default is `${SERVICE}@${HOST}`. `${SERVICE}` is replaced with the value of `KerberosRemoteServiceName` and `${HOST}` is replaced with the hostname of the coordinator (after canonicalization if enabled).
`KerberosConfigPath` | Kerberos configuration file.
`KerberosKeytabPath` | Kerberos keytab file.
`KerberosCredentialCachePath` | Kerberos credential cache.
`extraCredentials` | Extra credentials for connecting to external services. The extraCredentials is a list of key-value pairs. Example: `foo:bar;abc:xyz` will create credentials `abc=xyz` and `foo=bar`