问题
When I try to connect a MySQL database directly with JDBC on Android, I got the Exception like this:
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar",...
and my test code is here:
package com.kurosei.app.test;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(URL,USER,PWD);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
and my build.gradle is here:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.kurosei.app.test"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'mysql:mysql-connector-java:8.0.11'
}
The version of JDK is 1.8.0_152
The version of Gradle Plugin is 3.1.3
The version of Android Studio is 3.1.2
Don't ask why I choose this way to access the database...
回答1:
You can use an existing app on the Play Store called RemoDB to connect to your database. If you still prefer to connect yourself, you can try using the versions 6.x.x of the jdbc driver
回答2:
You may want to include JBoss JDBC Wrapper, added below in gradle
implementation files('libs/jboss-common-jdbc-wrapper.jar')
来源:https://stackoverflow.com/questions/50790557/classnotfoundexception-didnt-find-class-java-sql-sqltype-on-path-dexpathlis