【问题标题】:org.postgres.Driver Class Exception - Beginnerorg.postgres.Driver 类异常 - 初学者
【发布时间】:2017-08-24 09:07:58
【问题描述】:

感谢您的帮助,我在这里完全是菜鸟,但正在努力学习。 下面的代码只是试图创建到数据库的连接。我收到了这个错误:

java.lang.ClassNotFoundException: org.postgres.Driver
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at CreateDB.main(CreateDB.java:11)
java.lang.ClassNotFoundException: org.postgres.Driver

在网上研究过我遇到的解决方案是检查库是否已添加到构建路径中。我可以确认我有(我认为)。为此,我右键单击项目 -> 属性 -> Java 构建路径 -> 外部 JARS 并导航到位于“...\eclipse-workspace\libraries\”中的 postgresql - 42.41.4..jar 我可以看到该库已添加到项目中引用的库下。 现在我没有任何线索。非常感谢任何帮助。

我在这里学习https://www.tutorialspoint.com/postgresql/postgresql_java.htm

import java.sql.Connection;
import java.sql.DriverManager;

public class CreateDB {
    public static void main(String Args[]) {
        Connection c = null;
        try {
            Class.forName("org.postgres.Driver");
            c = DriverManager.getConnection("jdbc.postgresql://localhost:1080/VEM", "postgres", "Diablo12" ); //creates connection with U&P
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.getClass().getName() +": " + e.getMessage());
            System.exit(0);
        }
        System.out.println("Database opened successfully");
    }
}

【问题讨论】:

  • 除了错误的类名(见亨利的回答):Class.forName() 自 Java 6 起不再需要

标签: java sql postgresql connection


【解决方案1】:

正确的驱动程序名称是:org.postgresql.Driver。所以你的代码应该是这样的:

import java.sql.Connection;
import java.sql.DriverManager;

public class CreateDB {
    public static void main(String args[]) {
        Connection c = null;
        try {
            Class.forName("org.postgresql.Driver");
            c = DriverManager.getConnection("jdbc.postgresql://localhost:1080/VEM", "postgres", "Diablo12" ); //creates connection with U&P
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.getClass().getName() +": " + e.getMessage());
            System.exit(0);
        }
        System.out.println("Database opened successfully");
   }
}

错误的驱动程序名称导致 java 抛出 ClassNotFoundException,因为在类路径中找不到具有传递名称的类。 由于 Java 6,不再需要通过 Class.forName() 加载驱动程序,就像 a_horse_with_no_name 在他的评论中指出的那样。

【讨论】:

  • 或者干脆忽略Class.forName(),这不再需要了
  • @a_horse_with_no_name 是的。我解释它是因为它是失败的原因。
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 2018-01-04
  • 2014-02-11
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
相关资源
最近更新 更多