J'ai une instance locale en cours d'exécution de PostgreSql sur une machine Linux. Lorsque j'utilise la commande psql
du Shell, je réussis à me connecter sans problème. Je dois me connecter au PostgreSql via le JDBC, mais je ne sais pas exactement ce que dois-je passer en tant que paramètre url
à DriverManager.getConnection()
.
Il devrait commencer par jdbc:postgresql:
mais que se passe-t-il ensuite?
Le groupe système m'a dit qu'une base de données avec a été créée comme nom d'utilisateur. par exemple. si mon utilisateur est jutky
une base de données nommée jutky
a été créée, mais lorsque j'essaie d'ouvrir une connexion à jdbc:postgresql:jutky
Je reçois une erreur
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky"
:(
Informations supplémentaires
Lorsque je me connecte via le psql
je ne suis pas invité à entrer le mot de passe, donc lorsque j'essaie de me connecter via JDBC, je passe une chaîne vide comme mot de passe - est-ce correct, ou dois-je passer null
ou quelque chose?
Quand je tape psql --help
dans le Shell je vois parmi les autres cette ligne:
Connection options:
-h, --Host=HOSTNAME database server Host or socket directory (default: "/var/run/postgresql")
Je comprends donc que je me connecte à PostgreSql via un socket directory
, est-ce important pour la chaîne d'URL dans le JDBC?
MODIFIER
Merci d'abord pour les réponses.
Deuxièmement: ce n'est pas la première fois que j'utilise JDBC et en particulier pas la première fois que je me connecte au PostgreSql depuis JDBC, donc je connais les règles générales et j'ai lu les documentations. Cependant, dans le cas décrit, je ne sais pas exactement comment dois-je construire la chaîne de connexion si l'instance s'exécute via le socket directory
et quel mot de passe dois-je fournir. Parce que lorsque je me connecte via le psql
je ne suis pas du tout invité à saisir mon mot de passe.
Merci d'avance.
En plus d'autres réponses, notez que par défaut Postgres est configuré pour accepter les connexions via les sockets Unix avec une authentification basée sur votre compte de système d'exploitation, c'est pourquoi psql
fonctionne correctement et ne nécessite pas de mot de passe.
Les connexions JDBC sont établies sur TCP/IP avec authentification par mot de passe, vous devez donc modifier pg_hba.conf
en conséquence. Par exemple, cette ligne autorise les connexions TCP/IP de la même machine à toutes les bases de données pour tous les utilisateurs avec authentification par mot de passe:
Host all all 127.0.0.1/32 md5
Après avoir ajouté cette ligne jdbc:postgresql:databasename
devrait marcher.
EDIT: Vous ne pouvez pas créer une connexion JDBC sur un socket Unix car le pilote JDBC PostgreSQL ne peut fonctionner que sur TCP/IP. Le mot de passe que vous utilisez lors de la création d'une connexion JDBC est le mot de passe attribué à votre utilisateur. Si vous ne l'avez pas, vous pouvez l'attribuer, par exemple, en utilisant ALTER USER
commande. Voir 19.3. Méthodes d'authentification .
Voir aussi:
Tout est expliqué dans documentation officielle .
Ceci est la partie pertinente:
String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);