首页 > 解决方案 > JDBC Postgresql 仅在 Main 类中工作

问题描述

我正在做一个需要操作 PostgreSQL 数据库的程序。我下载了 jdbc 驱动程序 .jar 并将其放在 lib 文件夹中并配置了 Intellij。

当我使用 Main.java 中的 Postgres JDBC 驱动程序时,一切正常。这是一个打印示例表中所有内容的示例:

public class Main {
    public static void main(String[] args) throws java.io.IOException {
        Class.forName("org.postgresql.Driver");
        Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Benerator","postgres","newPassword");
        PreparedStatement stmt = con.prepareStatement("select * from public.example");
        ResultSet res = stmt.executeQuery();
        while(res.next()){
            System.out.println(res.getString(1)+ " " + res.getString(2));}
}
}

但是,当我编写一个在另一个类中执行与 Main 完全相同的功能的函数时,我会收到一个 java.lang.ClassNotFoundException 就Class.forName行了。当然,下面的每一行都有例外。

这是 DBManager.java 类:

public class DBManager {

    public DBManager(){
    }

    public void printExample(){
        Class.forName("org.postgresql.Driver");
        Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Benerator","postgres","newPassword");
        PreparedStatement stmt = con.prepareStatement("select * from public.example");
        ResultSet res = stmt.executeQuery();
        while(res.next()){
            System.out.println(res.getString(1)+ " " + res.getString(2));}
    }
}

我认为这是一个新手问题,但我很难找到原因,有什么线索吗?

编辑:当我用 Try/Catch 包围我的代码时,一切正常

标签: javapostgresqljdbcdriver

解决方案


  1. 在 Intellij - goto 文件 - 项目结构 - 库中。如果您通过 Intellij 运行,请确保您可以看到库 jdbc
  2. 如果您通过直接 Java 命令运行 DBManager,请确保传递 -cp 参数,例如java -cp "somepath/lib/*" mypackage.MainClass

推荐阅读