使用JDBC连接到PostgreSql的本地实例

jut*_*tky 21 java postgresql connection-string database-connection jdbc

我在linux机器上有一个正在运行的PostgreSql本地实例.当我使用psqlshell中的命令时,我成功登录而没有任何问题.我需要通过JDBC连接到PostgreSql,但我不知道究竟应该将什么作为url参数传递给DriverManager.getConnection().

它应该从jdbc:postgresql:但接下来会发生什么?

系统组告诉我,创建了一个像用户名一样的数据库.例如,如果我的用户是jutky一个名为db的jutky创建者,但是当我尝试打开一个连接时,jdbc:postgresql:jutky我收到一个错误

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky" :(

附加信息

当我通过psql提示登录时,我没有提示输入密码,所以当我尝试通过JDBC登录时,我传递一个空字符串作为密码 - 它是正确的,还是我应该通过null什么?

当我输入psql --helpshell时,我看到其余的这一行:

Connection options:
   -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")
Run Code Online (Sandbox Code Playgroud)

所以我理解我通过a连接到PostgreSql socket directory,这对JDBC中的URL字符串有用吗?


编辑

首先要感谢答案.

第二:它不是我第一次使用JDBC,特别是我第一次从JDBC连接到PostgreSql,所以我知道一般规则,我已经阅读了文档.但是在描述的情况下,我不确定如果实例正在运行socket directory并且我应该提供什么密码,我应该如何构造连接字符串.因为当我通过登录时,psql我根本没有提示输入密码.

提前致谢.

axt*_*avt 28

除了其他答案,请注意默认情况下Postgres配置为通过Unix套接字接受基于您的操作系统帐户的身份验证的连接,这就是为什么psql工作正常并且不需要密码.

JDBC连接是通过TCP/IP进行密码验证的,因此您需要相应地进行修改pg_hba.conf.例如,此行允许所有具有密码身份验证的用户从同一台计算机到所有数据库的TCP/IP连接:

host    all         all         127.0.0.1/32          md5
Run Code Online (Sandbox Code Playgroud)

添加此行后jdbc:postgresql:databasename应该可以正常工作.

编辑:您无法通过Unix套接字创建JDBC连接,因为PostgreSQL JDBC驱动程序只能通过TCP/IP工作.创建JDBC连接时使用的密码是分配给用户的密码.如果没有,可以使用ALTER USER命令分配它.见19.3.验证方法.

也可以看看:


dar*_*ioo 8

这一切都在官方文档中解释过.

这是相关部分:

String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);
Run Code Online (Sandbox Code Playgroud)