postgresql
Se connecter à PostgreSQL à partir de Java
Recherche…
Introduction
L'API pour utiliser une base de données relationnelle à partir de Java est JDBC.
Cette API est implémentée par un pilote JDBC.
Pour l'utiliser, placez le fichier JAR avec le pilote sur le chemin de classe JAVA.
Cette documentation montre des exemples d'utilisation du pilote JDBC pour se connecter à une base de données.
Remarques
URL JDBC
L'URL JDBC peut prendre l'une des formes suivantes:
jdbc:postgresql:// host [: port ]/[ database ][ parameters ]
host
défaut àlocalhost
,port
à 5432.
Sihost
est une adresse IPv6, il doit être placé entre crochets.
Le nom de base de données par défaut est identique au nom de l'utilisateur connecté.Pour implémenter le basculement, il est possible d'avoir plusieurs entrées
host [: port ]
séparées par une virgule.
Ils sont essayés à tour de rôle jusqu'à ce qu'une connexion réussisse.jdbc:postgresql: database [ parameters ]
jdbc:postgresql:/[ parameters ]
Ces formulaires sont destinés aux connexions à
localhost
.
parameters
est une liste de paires key [= value ]
, dirigée par ?
et séparé par &
. Si la value
est manquante, il est supposé être true
.
Un exemple:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory
Les références
- Spécification JDBC: http://download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
- Pilote JDBC PostgreSQL: https://jdbc.postgresql.org/
- Documentation du pilote PostgreSQL JDBC: https://jdbc.postgresql.org/documentation/head/index.html
Connexion avec java.sql.DriverManager
C'est le moyen le plus simple de se connecter.
Tout d'abord, le pilote doit être enregistré avec java.sql.DriverManager
afin qu'il sache quelle classe utiliser.
Cela se fait en chargeant la classe de pilote, généralement avec 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);
}
L'utilisateur et le mot de passe ne peuvent pas non plus être inclus dans l'URL JDBC, auquel cas vous n'avez pas à les spécifier dans l' getConnection
méthode getConnection
.
Connexion avec java.sql.DriverManager et les propriétés
Au lieu de spécifier des paramètres de connexion tels que user et password (voir la liste complète ici ) dans l'URL ou un paramètre distinct, vous pouvez les empaqueter dans un objet java.util.Properties
:
/**
* 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);
}
Connexion avec javax.sql.DataSource à l'aide d'un pool de connexions
Il est courant d'utiliser javax.sql.DataSource
avec JNDI dans des conteneurs de serveur d'applications, où vous enregistrez une source de données sous un nom et l'examinez chaque fois que vous avez besoin d'une connexion.
Ceci est un code qui montre comment les sources de données fonctionnent:
/**
* 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;
}
Une fois que vous avez créé une source de données en appelant cette fonction, vous l'utilisez comme ceci:
/* 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();