postgresql
Stellen Sie von Java aus eine Verbindung zu PostgreSQL her
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 auflocalhost
,port
auf 5432.
Wenn derhost
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
- JDBC-Spezifikation: http://download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
- PostgreSQL-JDBC-Treiber: https://jdbc.postgresql.org/
- PostgreSQL-JDBC-Treiberdokumentation: https://jdbc.postgresql.org/documentation/head/index.html
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();