I am attempting to read a MySQL database into my Java Android-Studio project using JDBC.
I am receiving a bunch of errors such as "Rejecting re-init on previously-failed class java.lang.Class<com.mysql.cj.MysqlType>" and "java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList" (Error stack below).
The Class where I read from the DB:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class SQLConnect {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://{HOST}:3306/{DATABASE NAME}";
private static final String USERNAME = "{USER}";
private static final String PASSWORD = "{PASSWORD}";
public static List<Item> getItems() {
List<Item> list = new ArrayList<>();
Connection con = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER);
con = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Items");
while (rs.next()) {
Item item = new Item(rs.getLong(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getInt(6));
list.add(item);
}
}
catch (SQLException | ClassNotFoundException e){
e.printStackTrace();
}
return list;
}
}
I installed the JDBC MySQL Connector JAR file into my libs directory and its implemented like so in my build gradle file:
implementation files('libs/mysql-connector-java-8.0.25.jar')
The errors I'm seeing are:
Rejecting re-init on previously-failed class java.lang.Class<com.mysql.cj.MysqlType>: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType;
at com.mysql.cj.jdbc.DatabaseMetaData com.mysql.cj.jdbc.DatabaseMetaData.getInstance(com.mysql.cj.jdbc.JdbcConnection, java.lang.String, boolean, com.mysql.cj.jdbc.result.ResultSetFactory) (DatabaseMetaData.java:765)
at java.sql.DatabaseMetaData com.mysql.cj.jdbc.ConnectionImpl.getMetaData(boolean, boolean) (ConnectionImpl.java:1175)
at void com.mysql.cj.jdbc.ConnectionImpl.<init>(com.mysql.cj.conf.HostInfo) (ConnectionImpl.java:444)
at com.mysql.cj.jdbc.JdbcConnection com.mysql.cj.jdbc.ConnectionImpl.getInstance(com.mysql.cj.conf.HostInfo) (ConnectionImpl.java:246)
at java.sql.Connection com.mysql.cj.jdbc.NonRegisteringDriver.connect(java.lang.String, java.util.Properties) (NonRegisteringDriver.java:198)
at java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.util.Properties, java.lang.ClassLoader) (DriverManager.java:569)
at java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.lang.String, java.lang.String) (DriverManager.java:219)
at java.util.List com.example.shopscanner.SQLConnect.getItems() (SQLConnect.java:28)
at void com.example.shopscanner.MainActivity.onClickInventory(android.view.View) (MainActivity.java:65)
at void com.example.shopscanner.-$$Lambda$zheEIWeyGk6KJg7BfNmebtry8gk.onClick(android.view.View) (lambda:-1)
at boolean android.view.View.performClick() (View.java:6669)
at boolean com.google.android.material.button.MaterialButton.performClick() (MaterialButton.java:1119)
at boolean android.view.View.performClickInternal() (View.java:6638)
at boolean android.view.View.access$3100(android.view.View) (View.java:789)
at void android.view.View$PerformClick.run() (View.java:26145)
at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:873)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:99)
at void android.os.Looper.loop() (Looper.java:193)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6863)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:537)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[zip file "/data/app/com.example.shopscanner-DQKOG3CBfh5AskQQs5aTKw==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.shopscanner-DQKOG3CBfh5AskQQs5aTKw==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:169)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at com.mysql.cj.jdbc.DatabaseMetaData com.mysql.cj.jdbc.DatabaseMetaData.getInstance(com.mysql.cj.jdbc.JdbcConnection, java.lang.String, boolean, com.mysql.cj.jdbc.result.ResultSetFactory) (DatabaseMetaData.java:765)
at java.sql.DatabaseMetaData com.mysql.cj.jdbc.ConnectionImpl.getMetaData(boolean, boolean) (ConnectionImpl.java:1175)
at void com.mysql.cj.jdbc.ConnectionImpl.<init>(com.mysql.cj.conf.HostInfo) (ConnectionImpl.java:444)
at com.mysql.cj.jdbc.JdbcConnection com.mysql.cj.jdbc.ConnectionImpl.getInstance(com.mysql.cj.conf.HostInfo) (ConnectionImpl.java:246)
at java.sql.Connection com.mysql.cj.jdbc.NonRegisteringDriver.connect(java.lang.String, java.util.Properties) (NonRegisteringDriver.java:198)
at java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.util.Properties, java.lang.ClassLoader) (DriverManager.java:569)
at java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.lang.String, java.lang.String) (DriverManager.java:219)
at java.util.List com.example.shopscanner.SQLConnect.getItems() (SQLConnect.java:28)
at void com.example.shopscanner.MainActivity.onClickInventory(android.view.View) (MainActivity.java:65)
Any help would be greatly appreciated. Thanks!