Java JDBC Postgresql仅在主类中工作
我正在做一个程序,需要操作PostgreSQL数据库。我下载并将jdbc driver.jar放在一个lib文件夹中,并配置了Intellij 当我使用Main.java中的Postgres JDBC驱动程序时,一切正常。下面是一个打印示例表中所有内容的示例: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.
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包围我的代码时,一切都很好
Java-cp“somepath/lib/*”mypackage.MainClass
听起来不太可能,你的问题可能在不同的地方。顺便说一句,您只需注册驱动程序一次。@LaurenzAlbe在普通Java应用程序中,您根本不需要加载驱动程序:它将由
DriverManager
自动加载。错误表明您没有将postgresql库添加到类路径中。这显然不是重复的。@LaurenzAlbe是的,确实如此。我链接了ClassNotFoundException的通用副本和一个特定于PostgreSQL的副本,后者演示了一个解决方案。我没有从cl运行文件。我将在主类中实例化一个DBManager
对象,然后调用printExample()
方法