我正在尝试连接到我的MySQL服务器,但我收到错误,我不知道为什么。
下面是我使用的方法:
public ListeID lireBdd() { //retourne une liste contenant tous les id de la bdd
IdEnvoyes listebdd = new IdEnvoyes();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://dontconnecttomyserverpls/freecovid";
String user = "root";
String passwd = "root";
Connection conn = DriverManager.getConnection(url, user, passwd);
//Création d'un objet Statement
Statement state = conn.createStatement();
//L'objet ResultSet contient le résultat de la requête SQL
ResultSet result = state.executeQuery("SELECT * FROM freecovid.idMalades");
//On récupère les MetaData
ResultSetMetaData resultMeta = result.getMetaData();
while(result.next()){
for(int i = 0; i <= resultMeta.getColumnCount(); i++) {
listebdd.addId((Integer) result.getObject(i));
}
}
result.close();
state.close();
} catch (Exception e) {
e.printStackTrace();
}
return listebdd;
}我得到了这些错误
06-24 11:35:59.176 4360-4360/com.iutlan.freecovid E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.iutlan.freecovid, PID: 4360
java.lang.ExceptionInInitializerError
at com.mysql.cj.conf.ConnectionUrl.acceptsUrl(ConnectionUrl.java:317)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:185)
at java.sql.DriverManager.getConnection(DriverManager.java:179)
at java.sql.DriverManager.getConnection(DriverManager.java:213)
at com.iutlan.freecovid.ConnexionBdd.lireBdd(ConnexionBdd.java:22)
at com.iutlan.freecovid.MainActivity.testbdd(MainActivity.java:69)
at com.iutlan.freecovid.MainActivity.onCreate(MainActivity.java:56)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 4:
(?<scheme>[\w\+:%]+)\s*(?://(?<authority>[^/?#]*))?\s*(?:/(?!\s*/)(?<path>[^?#]*))?(?:\?(?!\s*\?)(?<query>[^#]*))?(?:\s*#(?<fragment>.*))?
^
at java.util.regex.Pattern.compileImpl(Native Method)
at java.util.regex.Pattern.compile(Pattern.java:411)
at java.util.regex.Pattern.<init>(Pattern.java:394)
at java.util.regex.Pattern.compile(Pattern.java:381)
at com.mysql.cj.conf.ConnectionUrlParser.<clinit>(ConnectionUrlParser.java:89)
... 20 more06-24 11:40:59.588 4360-4360/?I/Process:发送信号。PID: 4360 SIG: 9
你知道我会犯什么错误吗?
发布于 2020-06-25 01:28:44
问题是,Java /J驱动程序正在使用正则表达式功能(命名组),该功能由MySQL中的正则表达式实现支持,但不受Android的正则表达式实现支持。
换句话说,Android连接器/J驱动程序与MySQL不兼容。您可以通过降级到MySQL连接器/J的早期版本(例如5.1.x而不是8.0.x)来修复此问题。
但是,您根本不应该使用Android的JDBC驱动程序。从移动设备直接连接到远程数据库服务器(如MySQL )的性能通常很差,而且不是很安全。最好引入一个(Java) the服务来协调应用程序和数据库之间的关系。
https://stackoverflow.com/questions/62554300
复制相似问题