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

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

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

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

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

附加信息

当我通过 登录 时,系统不会提示我输入密码,因此当我尝试通过 JDBC 登录时,我会传递一个空字符串作为密码 - 它是正确的,还是我应该通过什么?psqlnull

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

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

所以我明白我通过连接到PostgreSql,这对JDBC中的URL字符串有什么关系吗?socket directory


编辑

首先感谢您的回答。

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

提前致谢。


答案 1

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

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

host    all         all         127.0.0.1/32          md5

添加此行后应该可以工作。jdbc:postgresql:databasename

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

另请参阅:


答案 2

这一切都在官方文档中进行了解释。

这是相关部分:

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

推荐