Reputation: 11645
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)
Upvotes: 9
Views: 2885
Reputation: 634
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.
Upvotes: 1
Reputation: 1159
It looks like you have added the library to the project, but didn't add this library to the dependencies of the module: Take Look At Here
Upvotes: 1
Reputation: 2060
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'
Upvotes: 1
Reputation: 476
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
Upvotes: 5