【问题标题】:java.lang.ClassNotFoundException: org.postgresql.Driver, Androidjava.lang.ClassNotFoundException:org.postgresql.Driver,Android
【发布时间】:2012-06-09 20:02:41
【问题描述】:

我在 Windows 上运行 Eclipse。

this tutorial 之后,我下载了 JDBC4,使用 Project>Properties>add External JAR 将其添加到我的构建路径中,浏览了该文件,它可以正常工作(.classpath 文件显示了正确的 lib 路径)。

包出现在我的引用库文件夹中,所以我继续教程。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    ....

    public void open ()
        {
    try {
        Class.forName("org.postgresql.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    try {
        conn = DriverManager.getConnection(url, username, password);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

我认为它会这么简单,但我被这个长长的堆栈跟踪打到了

    java.lang.ClassNotFoundException: org.postgresql.Driver

(如果需要我可以提供更多)

我尝试了include org.postgresql.*;,但这也无济于事。我也尝试过 JDBC3,但也没有运气。

我查看了Driver JDBC PostgreSQL with Android,它提供了一个模糊的答案,说我最好只使用 HTTP+JSON。我从来没有用过。

我是 Android、postgresql、Web 开发的新手,因此希望能提供一个简单的答案。

【问题讨论】:

  • 您是否将 .jar 放在 lib 文件夹中而不是 libs 中?由于 ADT r17,从外部位置引用的库将不会打包到 .apk 中。结果是您的项目可以正常编译,但在运行时您会遇到NoClassDefFoundError,因为缺少库。顺便说一下,SO上有很多类似的问答;例如this one.
  • 让它工作。很多东西要学:P 谢谢!

标签: java android postgresql classnotfoundexception


【解决方案1】:

在我对项目进行一些开发之前,我的 postgresql 驱动程序运行良好:添加了一些新文件,包括映射器文件,因为我使用了 Spring 和 MyBatis。突然,当我尝试在服务器--tomcat 上运行它时,我得到了无法加载org.postgresql.Driver 的错误。

我的情况的解决方案: 重新启动 Eclipse。也许在某些方面,Eclipse 与驱动程序失去了联系。所以需要重启来刷新。

【讨论】:

    【解决方案2】:

    我为gradel尝试了一百万个东西,我只需要将这一行添加到 build.gradel 文件中。

    dependencies {
        compile group: 'org.postgresql', name: 'postgresql', version: '42.2.1'
    }
    

    【讨论】:

      【解决方案3】:

      您需要在项目中添加 PostgreSQL JDBC 驱动程序,如 search.maven.org 中所述。

      Gradle

      implementation 'org.postgresql:postgresql:42.2.10'
      

      Maven

      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.10</version>
      </dependency>
      

      您也可以download JAR 并手动导入到您的项目中。

      注意:不推荐使用此答案中使用的编译。替换为按照3 的实现。

      【讨论】:

      • 你确定这是正确的使用吗? mvnrepository.com/artifact/org.postgresql/postgresql
      • 尝试运行 DriverManager.getConnection(),至少在版本 42.2.12 中,结果为 java.lang.ClassNotFoundException: Didn't find class "java.lang.management.ManagementFactory"
      • @Sumit 该错误的任何解决方案?得到同样的错误
      【解决方案4】:

      我遇到了同样的问题;但我犯的错误是我只在插件部分添加了 postgre 依赖项;将 postgre 依赖项(以下)添加到项目依赖项部分后,它就可以工作了。

      <dependency>
      <groupId>postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.1-901-1.jdbc4</version>    
      </dependency>
      

      【讨论】:

      【解决方案5】:

      下载 JDBC JAR 文件并将其添加到您正在使用的工具的构建路径中可能是一个临时解决方案,因为在我的情况下上述解决方案都没有解决。

      【讨论】:

        【解决方案6】:

        将jar包放入lib文件夹(WebContent-WEB-INF-lib),右键jar包-构建路径-添加构建路径

        【讨论】:

        • 这个驱动在android中不工作,java java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory; at org.postgresql.util.PGPropertyMaxResultBufferParser.adjustResultSize AFIK 没有适用于postgres的android驱动
        • 我确实加载了旧版本的驱动程序:org.postgresql:postgresql:42.2.9.jre7 更高版本在 Android 29 上失败(未在其他版本的 android 上测试)
        【解决方案7】:

        假设您的依赖项已正确配置(请参阅libs directory in Android SDK version 17 or above,正如评论中指出的那样),您应该能够通过向驱动程序管理器显式注册 9.2 驱动程序来使其工作。

        代替:

        Class.forName("org.postgresql.Driver");
        

        用途:

        DriverManager.register(new org.postgresql.Driver());
        

        (我也尝试过使用 9.3-1100-jdbc41 jar,但这不起作用。)

        请注意,正如explained by Craig Ringer in an answer to a duplicate question,在 Android 中使用 JDBC 并不是一个好主意,因为 JDBC 连接不太适合 Android 设备通常使用的网络使用模式。

        【讨论】:

          【解决方案8】:

          这是一个 CLASSPATH 问题;当类加载器尝试加载 PostgreSQL JDBC 驱动程序时,它不可用。您需要将其正确添加到您的 CLASSPATH 中。

          如果它在 Eclipse 中工作,那是因为将 JAR 添加到构建路径就是将它添加到 CLASSPATH。您必须了解 CLASSPATH 是如何在没有 Eclipse 辅助轮帮助您的情况下工作的。

          【讨论】:

            猜你喜欢
            • 2011-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-06
            • 2015-08-12
            • 1970-01-01
            相关资源
            最近更新 更多