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

时间:2018-04-02 05:37:57

标签: java android android-studio gradle classnotfoundexception

我不知道(太愚蠢),为什么我的应用程序在运行时找不到jdbc类:

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

你有任何提示吗?在此仓库中完成简化的用例:https://bitbucket.org/solvapps/jdbcapp

我添加了一个名为"维护"的模块。到我的Androidstudio项目来维护东西,不应该包含在应用程序中。 (我已经用另一个应用程序完成了这个。)

enter image description here

我保持格斗:

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。

enter image description here

我的代码,不是红色的:

 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)

4 个答案:

答案 0 :(得分:2)

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 文件添加到您的库中, 您可以从Here

下载文件

答案 1 :(得分:1)

org.sqlite.JDBC属于sqlite-jdbc jar,您需要在类路径中包含此jar。 您可以使用gradle从maven存储库下载jar。找到gardle依赖

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

答案 2 :(得分:1)

看起来您已将库添加到项目中,但未将此库添加到模块的依赖项中:Take Look At Here

答案 3 :(得分:1)

嗯,这不是完美的解决方案,但它可能会奏效。 添加:

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%确定它有效。但你应该尝试替换新术语的“编译文件”(我认为“实现文件”)。

让我知道它是如何运作的。

祝你好运。