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.

20
demandé sur jutky 2010-12-30 15:11:06

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:

25
répondu axtavt 2010-12-30 14:58:39

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);
8
répondu darioo 2010-12-30 12:17:53