You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IDE中Java通过JDBC连接PostgreSQL数据库报错问题求助

Java连接PostgreSQL报错排查

问题背景

编写Java代码实现与本地PostgreSQL数据库的交互,程序运行时抛出错误,相关信息如下:

  • 项目application.properties文件分三行配置本地数据库连接URL、用户名、密码
  • 异常详情:异常文本截图
  • 项目结构参考:项目结构
  • pgAdmin4界面参考: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中添加对应版本的驱动依赖即可,依赖示例:
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>
        <scope>runtime</scope>
    </dependency>
    
    如果是普通Java项目,手动下载对应版本的PostgreSQL JDBC jar包,添加到项目类路径中即可。
  • 配置文件读取失败
    触发场景是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:57:17