簡體   English   中英

Postgresql JDBC驅動程序導致NoClassDefFoundError

[英]Postgresql JDBC driver causing NoClassDefFoundError

我正在嘗試獲取一個正在開發的應用程序,以連接到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

盡管它可能與我使用的驅動程序版本有關,但我真的對為什么要拍攝此照片感到困惑。 (似乎我應該使用應該與Java 8兼容的42.2.5,但是每當使用它時,我都會收到編譯錯誤)。

這是調用它的代碼:

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項目文件夾中單擊一下即可簡單地添加到buildpath。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM