I have no clue (too stupid), why my app doesn't find the jdbc class at runtime:
Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
Do you have any hint ? Complete Simplified usecase in this repo : https://bitbucket.org/solvapps/jdbcapp
I have added a module called "maintain" to my Androidstudio project for maintaining stuff, which should not be included in the app. (I have done this already with another app).
My maintain gradle :
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'
}
After sync I see the jar in External Libraries.
My code, which is not red :
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());
}
Error:
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);}
}
You Must Add mysql-connector.jar File to Your Libraries, You can Download File From Here
org.sqlite.JDBC belongs to sqlite-jdbc jar, you need to include this jar in your classpath. You can use gradle to download jar from maven repository. Find the gardle depedency
compile 'org.xerial:sqlite-jdbc:3.8.11'
看起来您已将库添加到项目中,但未将此库添加到模块的依赖项中: 看看这里
Well, it's not the perfect solution but it might work. Add:
repositories {
...
flatDir {
dirs 'libs'
}
}
And:
dependencies {
...
compile files('libs/sqlite-jdbc-3.16.1.jar')
}
Don't forget to add sqlite-jdbc-3.16.1.jar into
[your project's folder]\\app\\libs
as you will be using a local jar file instead of importing it. Just create the "libs" folder if it doesn't exist.
It's not exactly what you're asking for, but it might solve the problem. Also note that "compile" is getting deprecated by the end of 2018. I only gave you this solution because I'm 100% sure it works. But you should try to replace that "compile files" for the new term ("implementation files", I think?).
Let me know how it works out.
Good luck.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.