【发布时间】:2018-09-11 08:24:08
【问题描述】:
我不知道(太愚蠢了),为什么我的应用在运行时找不到 jdbc 类:
Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
你有什么提示吗?此仓库中的完整简化用例:https://bitbucket.org/solvapps/jdbcapp
我在我的 Androidstudio 项目中添加了一个名为“maintain”的模块,用于维护不应包含在应用程序中的内容。 (我已经用另一个应用程序做到了)。
我的维护等级:
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)
【问题讨论】:
-
Android 对版本 xerial sqlite-jdbc 3.16.1 的支持被明确标记为实验性的。为什么不使用最新版本?
-
这与jdbc驱动的版本无关。从模块中识别 jar 是一个普遍的问题。
-
您是否检查过 sqlite-jdbc 类是否包含在应用的 dex 文件中(例如,通过 Android Sudio APK Inspector)?
标签: java android android-studio gradle classnotfoundexception