如果密码包含%符号,Java无法连接到MySQL

时间:2017-12-06 08:43:30

标签: java mysql jdbc

这是我的连接网址:

jdbc:mysql://mydbhost:3306/mydatabase?user=username&password=%u16*!ypK@WrUQbr

当我打电话

DriverManager.getConnection()

使用当前网址我捕捉异常:

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

如果连接网址不包含%,则一切正常。

我找到了一些有关此问题的信息,建议您进行下一次转换:

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

通过此转换,我有错误:

Access denied for user(incorrect password)

有人可以帮助正确转换网址吗?

2 个答案:

答案 0 :(得分:4)

尝试使用以下字符串,其中密码中的所有保留字符都替换为适当的百分比编码值:

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

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

有关百分比编码Wikipedia

的详细信息

答案 1 :(得分:0)

我曾尝试过" Carlos Heuberger"推荐的, call getConnection(String url,String user,String password)

在这种风格中它起作用,从我的视野看起来更清晰,而不是构建一个包含所有参数的巨大URL