簡體   English   中英

java.lang.ClassNotFoundException:org.sqlite.JDBC Androidstudio Java模塊

[英]java.lang.ClassNotFoundException: org.sqlite.JDBC Androidstudio Java Module

我沒有線索(太愚蠢),為什么我的應用程序在運行時沒有找到jdbc類:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC

你有什么提示嗎? 在此repo中完成簡化的用例: https//bitbucket.org/solvapps/jdbcapp

我在我的Androidstudio項目中添加了一個名為“維護”的模塊來維護內容,這些內容不應包含在應用程序中。 (我已經用另一個應用程序完成了這個)。

在此輸入圖像描述

我保持平衡:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

repositories {
    mavenCentral()
}


dependencies {
    compile 'org.xerial:sqlite-jdbc:3.16.1'
    compile 'commons-net:commons-net:3.3'
    compile 'org.zeroturnaround:zt-zip:1.11'
    compile 'org.zeroturnaround:zt-zip:1.11'
    compile 'org.apache.commons:commons-lang3:3.5'
}

同步后,我在外部庫中看到了jar。

在此輸入圖像描述

我的代碼,不是紅色的:

 public static void connect(String language, boolean readonly) throws SQLException, ClassNotFoundException, IOException {

        // Hole DBPath
        String dbpath = Constants.getDbName(language);

        Class.forName("org.sqlite.JDBC");
        SQLiteConfig config = new SQLiteConfig();

        if (readonly){
            config.setReadOnly(true);
        }else{
            config.setReadOnly(false);
        }

        connection = DriverManager.getConnection("jdbc:sqlite:" + dbpath,config.toProperties());
    }

錯誤:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at solveraapps.maintain.DbService.connect(DbService.java:24)
try{  
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con;
        con=DriverManager.getConnection("jdbc:mysql://localhost:8080/DBName","root","root");  
        //here DBName is database name, root is username and password  
        Statement stmt=con.createStatement();  
        ResultSet rs=stmt.executeQuery("select * from Table_name");
        //Table_name is Table Name Which Must Exist IN Your Database
        while(rs.next())  
        System.out.println(rs.getInt(1)+"  "+rs.getString(2)+"  "+rs.getString(3));  
        con.close();  
    }catch(Exception e){ System.out.println(e);}  
    } 

您必須將mysql-connector.jar文件添加到您的庫中,您可以從此處下載文件

org.sqlite.JDBC屬於sqlite-jdbc jar,你需要在你的類路徑中包含這個jar。 您可以使用gradle從maven存儲庫下載jar。 找到gardle依賴

compile 'org.xerial:sqlite-jdbc:3.8.11'

看起來您已將庫添加到項目中,但未將此庫添加到模塊的依賴項中: 看看這里

嗯,這不是完美的解決方案,但它可能會奏效。 加:

repositories {

    ...

    flatDir {
        dirs 'libs'
    }
}

和:

dependencies {

    ...

    compile files('libs/sqlite-jdbc-3.16.1.jar')
}

不要忘記將sqlite-jdbc-3.16.1.jar添加到

[您項目的文件夾] \\ app \\ libs

因為您將使用本地jar文件而不是導入它。 如果它不存在,只需創建“libs”文件夾。

這不完全是你所要求的,但它可以解決問題。 另請注意,“編譯”在2018年底之前已被棄用。我只給了你這個解決方案,因為我100%確定它有效。 但你應該嘗試為新術語替換“編譯文件”(我認為“實現文件”?)。

讓我知道它是如何工作的。

祝好運。

暫無
暫無

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

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