Java JDBC Postgresql仅在主类中工作

Java JDBC Postgresql仅在主类中工作,java,postgresql,jdbc,driver,Java,Postgresql,Jdbc,Driver,我正在做一个程序,需要操作PostgreSQL数据库。我下载并将jdbc driver.jar放在一个lib文件夹中,并配置了Intellij 当我使用Main.java中的Postgres JDBC驱动程序时,一切正常。下面是一个打印示例表中所有内容的示例: public class Main { public static void main(String[] args) throws java.io.IOException { Class.forName("org.

我正在做一个程序,需要操作PostgreSQL数据库。我下载并将jdbc driver.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之外的另一个类中编写一个函数时,我在
class.forName
行上收到一个java.lang.ClassNotFoundException。当然,下面的每一行都有例外

下面是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包围我的代码时,一切都很好

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

  • 听起来不太可能,你的问题可能在不同的地方。顺便说一句,您只需注册驱动程序一次。@LaurenzAlbe在普通Java应用程序中,您根本不需要加载驱动程序:它将由
    DriverManager
    自动加载。错误表明您没有将postgresql库添加到类路径中。这显然不是重复的。@LaurenzAlbe是的,确实如此。我链接了ClassNotFoundException的通用副本和一个特定于PostgreSQL的副本,后者演示了一个解决方案。我没有从cl运行文件。我将在主类中实例化一个
    DBManager
    对象,然后调用
    printExample()
    方法