IDE中Java通过JDBC连接PostgreSQL数据库报错问题求助
Java连接PostgreSQL报错排查
问题背景
编写Java代码实现与本地PostgreSQL数据库的交互,程序运行时抛出错误,相关信息如下:
- 项目
application.properties文件分三行配置本地数据库连接URL、用户名、密码 - 异常详情:

- 项目结构参考:

- pgAdmin4界面参考:

核心代码
Main.java
public static void main(String[] args) throws SQLException { Class<Driver> driverClass = Driver.class; try (var connection = ConnectionManager.open()) { System.out.println(connection.getTransactionIsolation()); } }
ConnectionManager.java
public final class ConnectionManager { private static final String PASSWORD_KEY = "db.password"; private static final String USERNAME_KEY = "db.username"; private static final String URL_KEY = "db.url"; static { loadDriver(); } private ConnectionManager() { } public static Connection open() { try { return DriverManager.getConnection( PropertiesUtil.get(URL_KEY), PropertiesUtil.get(USERNAME_KEY), PropertiesUtil.get(PASSWORD_KEY) ); } catch (SQLException e) { throw new RuntimeException(e); } } private static void loadDriver() { try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } }
PropertiesUtil.java
public final class PropertiesUtil { private static final Properties PROPERTIES = new Properties(); static { loadProperties(); } private PropertiesUtil() { } public static String get(String key) { return PROPERTIES.getProperty(key); } private static void loadProperties() { try (var inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("application.properties")) { PROPERTIES.load(inputStream); } catch (IOException e) { throw new RuntimeException(e); } } }
报错原因与解决方法
按代码执行顺序逐一排查以下常见问题:
- 驱动类找不到(ClassNotFoundException)
触发场景是静态代码块执行loadDriver()时抛出异常,根本原因是项目未引入PostgreSQL JDBC驱动依赖。如果是Maven项目,在pom.xml中添加对应版本的驱动依赖即可,依赖示例:
如果是普通Java项目,手动下载对应版本的PostgreSQL JDBC jar包,添加到项目类路径中即可。<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> <scope>runtime</scope> </dependency> - 配置文件读取失败
触发场景是loadProperties()方法抛出空指针异常或IO异常,核心原因有两个:application.properties文件没有放在src/main/resources目录下,类加载器无法从类路径根目录找到该文件,调整文件位置到标准资源目录即可- 配置文件中的键名和代码中定义的常量不匹配,代码读取的键为
db.url、db.username、db.password,配置文件必须严格使用这三个键名,标准配置格式如下:db.url=jdbc:postgresql://localhost:5432/你的实际数据库名 db.username=你的数据库用户名 db.password=你的数据库密码
- 数据库连接参数错误
触发场景是DriverManager.getConnection()抛出SQLException,逐一核对以下项:- 本地PostgreSQL服务是否正常启动
- 连接URL中的端口号是否和PostgreSQL实际运行端口一致(默认5432)
- URL中指定的数据库名是否真实存在
- 填写的用户名、密码是否和pgAdmin4中登录使用的凭据一致,可直接用相同参数在pgAdmin4新建连接验证有效性
内容的提问来源于stack exchange,提问作者Mars
相关产品推荐
相关产品推荐

