java - Postgresql JDBC 驱动程序导致 NoClassDefFoundError

标签 java android postgresql jdbc

我正在尝试让我正在开发的应用程序连接到 Postgresql 服务器。我从官方 Postgresql JDBC 驱动程序页面下载了 postgresql-42.2.5.jre7,将 jar 放到 libs 目录中,在类路径中添加了一行,以便它可以编译。一切正常,直到我真正尝试建立连接,此时我收到此错误:

Caused by: java.lang.ClassNotFoundException: Didn't find class "java.util.Locale$Category" on path: DexPathList[[zip file "/data/app/swca.lithicdebitagetally-2/base.apk"],nativeLibraryDirectories=[/data/app/swca.lithicdebitagetally-2/lib/arm, /vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at org.postgresql.util.GT.<init>(GT.java:35)
            at org.postgresql.util.GT.<clinit>(GT.java:21)
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292)
            at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
            at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
            at org.postgresql.Driver.makeConnection(Driver.java:454)
            at org.postgresql.Driver.connect(Driver.java:256)
            at java.sql.DriverManager.getConnection(DriverManager.java:179)
            at java.sql.DriverManager.getConnection(DriverManager.java:213)
            at swca.lithicdebitagetally.UploadData.doInBackground(UploadData.java:31)
            at swca.lithicdebitagetally.UploadData.doInBackground(UploadData.java:14)
            at android.os.AsyncTask$2.call(AsyncTask.java:295)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
            at java.lang.Thread.run(Thread.java:818)
    Suppressed: java.lang.ClassNotFoundException: java.util.Locale$Category
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 18 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我真的很困惑为什么它会这样拍摄,尽管这可能与我使用的驱动程序版本有关。 (看起来我应该使用 42.2.5,它应该与 Java 8 兼容,但每当我使用它时我都会收到编译错误)。

下面是调用它的代码:

protected String doInBackground(String... params){
    Connection connection = null;
    String result = "success";

    try{
        Class.forName("org.postgresql.Driver");
    }

    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
        result = "fail";
    }

    try {
        connection = DriverManager.getConnection(
                "jdbc:postgresql://**.*.****.***:***/*****", "****",
                "****");
    } catch (SQLException e) {
        System.out.println("Connection Failed! Check output console");
        e.printStackTrace();
        result = "fail";

    }

    return result;
}

最佳答案

看来您导入的 JDBC 驱动程序错误。如果您使用的是 Java 8,则应下载 42.2.5 JDBC 驱动程序。

我刚刚在 Eclipse IDE 上使用 Java 8、Postgre JDBC 驱动程序 42.2.5 进行测试,它成功了。

我认为在类路径中插入一行并不是管理依赖关系的最佳方法。您可以使用 Maven 或任何其他依赖管理系统来完成此操作。或者只需在 IDE 项目文件夹中单击几下即可添加到构建路径。

关于java - Postgresql JDBC 驱动程序导致 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53824560/

相关文章:

java - 使用 VBA Web scrape 在下拉菜单中选择值

android - 重写 View.layout(...) 时出现 VirtualMachineError

postgresql - 我的 postgresql 查询有问题

postgresql - 在文本 Postgres 中找到 "'"

postgresql - Postgres 版本不兼容

java - Gradle:更改外部依赖项的配置

java - tomee webservice 未部署 - asm 错误 - 无法为 Web 模块 simple-webservice 创建注释扫描器 : 43626

java - 构造函数调用不同类的 AspectJ 切入点 - 识别创建的对象类型

java - Android:使用未经检查或不安全的操作

c# - 在 Unity 中使用 XML 存储颜色和字符串