Connexion à l'instance locale de PostgreSql avec JDBC
J'ai une instance locale de PostgreSql en cours d'exécution sur une machine linux. Lorsque j'utilise psql
commande du shell je réussis à me connecter sans aucun problème. J'ai besoin de vous connecter à PostgreSql via JDBC, mais je ne sais pas exactement ce que dois-je passer comme url
paramètre DriverManager.getConnection()
.
il devrait commencer par jdbc:postgresql:
mais que se passe ensuite?
le groupe système m'a dit qu'une base de données avec un nom d'utilisateur avait été créée. par exemple, si mon utilisateur est jutky
db nommé jutky
a été créé, mais lorsque j'essaie d'ouvrir une connexion à jdbc:postgresql:jutky
j'obtiens une erreur
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky"
: (
renseignements supplémentaires
quand je me connecte via le psql
Je ne suis pas invité pour le mot de passe, donc quand j'essaye de me connecter via JDBC je passe une chaîne vide comme mot de passe - est-il correct, ou si je passe null
ou quelque chose?
Quand je tape psql --help
dans la coquille je vois parmi le reste cette ligne:
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "/var/run/postgresql")
alors je comprends que je me connecte à PostgreSql via un socket directory
, est-ce que cela a de l'importance pour la chaîne D'URL dans la JDBC?
EDIT
premier merci pour les réponses.
Second: 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. Toutefois, dans le cas décrit Je ne sais pas comment construire la chaîne de connexion si l'instance tourne via socket directory
et quel mot de passe dois-je fournir. Parce que quand je me connecte via le psql
on ne me demande pas de mot de passe du tout.
Merci d'avance.
2 réponses
en plus des autres réponses, notez que par défaut Postgres est configuré pour accepter les connexions via des sockets Unix avec authentification basée sur votre compte système d'exploitation, c'est pourquoi psql
fonctionne bien et ne nécessite pas le mot de passe.
les connexions JDBC sont faites sur TCP / IP avec authentification par mot de passe, donc vous devez modifier pg_hba.conf
en conséquence. Par exemple, cette ligne permet des connexions TCP/IP depuis la même machine vers toutes les bases de données pour tous les utilisateurs avec mot de passe authentification:
host all all 127.0.0.1/32 md5
après avoir ajouté cette ligne jdbc:postgresql:databasename
devrait fonctionner.
EDIT: vous ne pouvez pas créer une connexion JDBC sur Unix socket car le pilote JDBC PostgreSQL ne peut fonctionner que sur TCP/IP. Le mot de passe que vous utilisez lors de la création de la connexion JDBC est le mot de passe assigné à votre utilisateur. Si vous ne l'avez pas, vous pouvez l'assigner, par exemple, en utilisant ALTER USER
la commande. Voir 19.3. Méthodes d'authentification.
Voir aussi:
tout est expliqué dans documents officiels.
C'est la partie pertinente:
String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);