gpt4 book ai didi

java - JDBC MySQL URL 和特殊字符的问题

转载 作者:行者123 更新时间:2023-11-29 05:08:36 27 4
gpt4 key购买 nike

我目前在 JDBC MySQL 连接的 URL 中遇到特殊字符如 : 的问题。因为它是一个 URL,我想我可以对我提供的字符串进行 URL 编码(比如密码)。但是它不起作用。

我试过下面的代码

public class DatabaseConnection {
protected static String urlEncode(String toEncode) {
try {
return URLEncoder.encode(toEncode, "UTF-8");
} catch (UnsupportedEncodingException e) {
// Won't happen anyways!
e.printStackTrace();

return null;
}
}

public DatabaseConnection(String host, int port, String database, String user, String password)
throws SQLException {
StringBuilder connectionURL = new StringBuilder();

connectionURL.append("jdbc:mysql://").append(urlEncode(host)).append(':').append(port).append('/')
.append(urlEncode(database)).append("?user=").append(urlEncode(user)).append("&password=")
.append(urlEncode(password));

connect(connectionURL);
}
}

(connect 方法运行良好。它依赖于我使用的库,因此提供代码不会有太大作用。)

只要密码(或任何其他字符串)不包含 :,代码就可以正常工作。可能是其他字符也不起作用,但我还没有测试过。 : 被转义为 %3A。然后登录失败。我多次验证密码是正确的。 (通过命令行连接MySQL服务器进行测试)

最佳答案

JDBC URL 不一定遵循“普通”Internet URL 的规则。但是,查看 MySQL Connector/J 中的代码 NonRegisteringDriver.parseURL ,它将 java.net.URLDecoder 应用于键和值,所以我实际上希望它能工作;不确定发生了什么。

如果特定问题与用户名和密码有关,则解决方案是不将它们包含在 URL 中,而是使用以下之一:

如果由于您使用的 API 而无法调用这些,您可能需要联系库作者以查看可以采取哪些措施来修复它。

最后还有一个实用的解决方案:只是不要在密码中使用冒号。

作为旁注:在这里没有必要像您一样使用 StringBuilder;如果您使用纯字符串连接,Java 编译器会为您优化它。

关于java - JDBC MySQL URL 和特殊字符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com