Java连接PostgreSQL认证失败求助:参数正确仍报错
PostgreSQL Java连接密码验证失败排查建议
我是一名.NET开发者,正在学习Java。通过Docker在localhost:5432运行了PostgreSQL实例,数据库名、用户名均为knowledgemap,密码为test123。.NET应用能正常连接并执行所有操作,但Java应用连接时报错:FATAL: password authentication failed for user "knowledgemap"。使用Windows 11笔记本,已在防火墙允许Java和Intellij IDEA访问网络,问题仍存在。
Java代码
package org.example; import java.sql.*; public class Main { public static void main(String[] args) throws SQLException { String url = "jdbc:postgresql://localhost:5432/knowledgemap"; String username = "knowledgemap"; String password = "test123"; Connection db = DriverManager.getConnection(url, username, password); } }
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>Java_PostgresConnectionTest</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.4</version> </dependency> </dependencies> </project>
补充信息
- PostgreSQL版本:PostgreSQL 16.3 (Debian 16.3-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
- .NET连接字符串:
UserID=knowledgemap;Password=test123;Host=localhost;Port=5432;Database=knowledgemap; - .NET驱动版本:
Npgsql.EntityFrameworkCore.PostgreSQL v8.0.4 - pg_hba.conf相关片段:
TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust
排查建议
- 检查变量的隐形字符:复制粘贴密码或URL时可能带入不可见字符,手动重新输入
username和password的内容,或通过System.out.println(username.length() + ":" + username)、System.out.println(password.length() + ":" + password)打印变量长度和内容,确认无多余字符。 - 强制使用IPv4连接:Windows下
localhost可能优先解析为IPv6地址::1,虽然pg_hba.conf允许该地址的信任连接,但可以尝试将JDBC URL改为jdbc:postgresql://127.0.0.1:5432/knowledgemap,强制使用IPv4连接排除潜在问题。 - 查看PostgreSQL详细日志:进入Docker容器查看数据库日志,日志会记录连接失败的具体原因。执行命令:
docker exec -it [容器ID/名称] tail -f /var/log/postgresql/postgresql-16-main.log(日志路径可能因镜像差异略有调整)。 - 验证驱动兼容性:当前使用的postgresql驱动42.7.4理论上支持PostgreSQL 16,但可尝试升级到最新稳定版或降级到42.6.x版本,排除驱动版本适配问题。
- 确认Docker端口映射:执行
docker ps查看容器端口映射,确保5432端口已正确映射到主机的5432端口(显示为0.0.0.0:5432->5432/tcp或127.0.0.1:5432->5432/tcp)。 - 用psql工具测试连接:在Windows命令行执行
psql -h localhost -p 5432 -U knowledgemap -d knowledgemap,输入密码test123,验证是否能正常连接,排除数据库本身的认证配置问题。 - 检查IDEA运行配置:确认IntelliJ IDEA的Run/Debug Configurations中没有通过环境变量、VM参数等覆盖代码中的
username和password值。
内容的提问来源于stack exchange,提问作者Arun Kumar A.J
相关产品推荐
相关产品推荐

