Suche…


Einführung

Die API zur Verwendung einer relationalen Datenbank aus Java ist JDBC.

Diese API wird von einem JDBC-Treiber implementiert.

Um es zu verwenden, setzen Sie die JAR-Datei mit dem Treiber in den JAVA-Klassenpfad.

Diese Dokumentation zeigt Beispiele, wie Sie mit dem JDBC-Treiber eine Verbindung zu einer Datenbank herstellen.

Bemerkungen

JDBC-URL

Die JDBC-URL kann eine der folgenden Formen annehmen:

  • jdbc:postgresql:// host [: port ]/[ database ][ parameters ]

    host standardmäßig auf localhost , port auf 5432.
    Wenn der host eine IPv6-Adresse ist, muss diese in eckigen Klammern stehen.
    Der Standard-Datenbankname entspricht dem Namen des verbindenden Benutzers.

    Um ein Failover zu implementieren, können mehrere host [: port ] -Einträge durch ein Komma getrennt werden.
    Sie werden der Reihe nach versucht, bis eine Verbindung erfolgreich ist.

  • jdbc:postgresql: database [ parameters ]

  • jdbc:postgresql:/[ parameters ]

    Diese Formulare dienen zur Verbindung mit localhost .

parameters ist eine Liste von key [= value ] , die von ? und durch & getrennt. Wenn der value fehlt, wird davon ausgegangen, dass er true .

Ein Beispiel:

jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory

Verweise

Verbindung mit java.sql.DriverManager

Dies ist der einfachste Weg, um eine Verbindung herzustellen.

Zunächst muss der Treiber bei java.sql.DriverManager registriert werden, damit er weiß, welche Klasse verwendet werden soll.
Dazu wird die Treiberklasse in der Regel mit java.lang.Class.forname( <driver class name> ) .

/**
 * Connect to a PostgreSQL database.
 * @param url the JDBC URL to connect to; must start with "jdbc:postgresql:"
 * @param user the username for the connection
 * @param password the password for the connection
 * @return a connection object for the established connection
 * @throws ClassNotFoundException if the driver class cannot be found on the Java class path
 * @throws java.sql.SQLException if the connection to the database fails
 */
private static java.sql.Connection connect(String url, String user, String password)
    throws ClassNotFoundException, java.sql.SQLException
{
    /*
     * Register the PostgreSQL JDBC driver.
     * This may throw a ClassNotFoundException.
     */
    Class.forName("org.postgresql.Driver");
    /*
     * Tell the driver manager to connect to the database specified with the URL.
     * This may throw an SQLException.
     */
    return java.sql.DriverManager.getConnection(url, user, password);
}

Benutzer und Kennwort können nicht in der JDBC-URL enthalten sein. In diesem Fall müssen Sie sie nicht im Aufruf der getConnection Methode angeben.

Verbindung mit java.sql.DriverManager und Eigenschaften

Anstatt Verbindungsparameter wie Benutzer und Kennwort (siehe eine vollständige Liste hier ) in der URL oder in separaten Parametern anzugeben, können Sie sie in ein java.util.Properties Objekt packen:

/**
 * Connect to a PostgreSQL database.
 * @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
 * @param user the username for the connection
 * @param password the password for the connection
 * @return a connection object for the established connection
 * @throws ClassNotFoundException if the driver class cannot be found on the Java class path
 * @throws java.sql.SQLException if the connection to the database fails
 */
private static java.sql.Connection connect(String url, String user, String password)
    throws ClassNotFoundException, java.sql.SQLException
{
    /*
     * Register the PostgreSQL JDBC driver.
     * This may throw a ClassNotFoundException.
     */
    Class.forName("org.postgresql.Driver");
    java.util.Properties props = new java.util.Properties();
    props.setProperty("user", user);
    props.setProperty("password", password);
    /* don't use server prepared statements */
    props.setProperty("prepareThreshold", "0");
    /*
     * Tell the driver manager to connect to the database specified with the URL.
     * This may throw an SQLException.
     */
    return java.sql.DriverManager.getConnection(url, props);
}

Verbindung mit javax.sql.DataSource über einen Verbindungspool

Es ist üblich, javax.sql.DataSource mit JNDI in Anwendungsservercontainern zu verwenden, wo Sie eine Datenquelle unter einem Namen registrieren und bei Bedarf nachschlagen.

Dieser Code zeigt, wie Datenquellen funktionieren:

/**
 * Create a data source with connection pool for PostgreSQL connections
 * @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
 * @param user the username for the connection
 * @param password the password for the connection
 * @return a data source with the correct properties set
 */
private static javax.sql.DataSource createDataSource(String url, String user, String password)
{
    /* use a data source with connection pooling */
    org.postgresql.ds.PGPoolingDataSource ds = new org.postgresql.ds.PGPoolingDataSource();
    ds.setUrl(url);
    ds.setUser(user);
    ds.setPassword(password);
    /* the connection pool will have 10 to 20 connections */
    ds.setInitialConnections(10);
    ds.setMaxConnections(20);
    /* use SSL connections without checking server certificate */
    ds.setSslMode("require");
    ds.setSslfactory("org.postgresql.ssl.NonValidatingFactory");

    return ds;
}

Nachdem Sie eine Datenquelle durch Aufrufen dieser Funktion erstellt haben, würden Sie diese wie folgt verwenden:

/* get a connection from the connection pool */
java.sql.Connection conn = ds.getConnection();

/* do some work */

/* hand the connection back to the pool - it will not be closed */
conn.close();


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow