问题
I am unable to connect JDBC to my database, getting following error
Error : E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myprojectapplication, PID: 32686
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myprojectapplication/com.example.myprojectapplication.MainActivity}:
java.lang.UnsupportedOperationException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.UnsupportedOperationException
at java.util.regex.Matcher.group(Matcher.java:383)
at com.mysql.cj.conf.ConnectionUrlParser.isConnectionStringSupported(ConnectionUrlParser.java:152)
at com.mysql.cj.conf.ConnectionUrl.acceptsUrl(ConnectionUrl.java:258)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:187)
at java.sql.DriverManager.getConnection(DriverManager.java:569)
at java.sql.DriverManager.getConnection(DriverManager.java:219)
at com.example.myprojectapplication.ObjectClass.JDBC.CONN(JDBC.java:19)
at com.example.myprojectapplication.MainActivity.onCreate(MainActivity.java:72)
at android.app.Activity.performCreate(Activity.java:6662)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
package com.example.myprojectapplication.ObjectClass;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBC {
public void CONN() {
Connection con = null;
try {
String url = "jdbc:mysql://localhost:3306/prog";
String username = "root";
String password = "mysql";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, username, password);
if (con != null) {
System.out
.println("Successfully connected to MySQL database test");
}
} catch (SQLException ex) {
System.out
.println("An error occurred while connecting MySQL databse");
ex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedOperationException exa){
exa.printStackTrace();
}
}
}
回答1:
According to the stacktrace, the MySQL Connector/J version you are using is using a java.util.regex.Matcher
feature not supported on Android (probably named groups). The workaround is to use a 5.1.x version of MySQL Connector/J instead of a 8.0.x version.
However, you shouldn't use JDBC from Android applications. It is insecure, and generally badly performing to connect to a database directly. The proper solution is to write a REST service (or other form of webservice) to mediate between your Android application and the database.
回答2:
Probably means that the msql driver information in your configuration does not match the load driver in your code. The high version of the mysql driver registration, try to use this method: Class.forName("com.mysql.cj.jdbc.Driver");
来源:https://stackoverflow.com/questions/58855255/unsupportedoperationexception-with-drivermanager-getconnection-on-android