2017-12-06 1 views
2

Hier ist meine Verbindung URL:Java kann nicht auf MySQL verbinden, wenn Kennwort% Symbol enthält

jdbc:mysql://mydbhost:3306/mydatabase?user=username&password=%u16*[email protected] 

Wenn ich

DriverManager.getConnection() 

mit aktueller URL aufrufen ich bin Fang Ausnahme:

ava.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u1" 

Wenn die Verbindungs-URL nicht% enthält, funktioniert alles.

ich habe einige Informationen zu diesem Problem gefunden, und es empfiehlt nächste Umwandlung zu tun:

replaceAll("%(?![0-9a-fA-F]{2})", "%25") 

Mit dieser Umwandlung ich habe Fehler: richtig

Access denied for user(incorrect password) 

jemand Hilfe URL konvertieren kann?

+0

@Berger: Diese Frage ist nicht eine reine Abfrage Zeichenfolge Parameter Typ. Weil die Parameter von der 'getConnection'-Methode zur Implementierung von 'DriverManager' übergeben und geparst werden. Problempunkt muss da sein. Daher kann nicht als Duplikat behandelt werden. –

+0

@RavinderReddy: Oh ja, du hast Recht, nur die Flagge zu entfernen. – Berger

+2

'@' und '!' sind reservierte Zeichen und '%' wird verwendet, um reservierte Zeichen zu verschlüsseln. Haben Sie versucht, Benutzer und Passwort getrennt von URL zu übergeben: 'getConnection (String url, String user, String passwort)'? –

Antwort

2

es mit folgendem String Versuche, in dem alle reservierten Zeichen in Ihrem Passwort mit dem entsprechenden Prozent-codierter Wert ersetzt werden:

% : %25 
* : %2A 
! : %21 
@ : %40 

"jdbc:mysql://mydbhost:3306/mydatabase?user=username&password=%25u16%2A%21ypK%40WrUQbr" 

Weitere Informationen über URL-Encoding Wikipedia

0

ich versucht habe, als " Carlos Heuberger "empfohlen, Aufruf getConnection (String URL, Zeichenfolge Benutzer, String Passwort)

In diesem Stil funktioniert es, und aus meiner Sicht sieht klarer statt eine große URL zu bauen mit allen Parametern enthalten

Verwandte Themen