Java JDBCMySQL URL和特殊字符的问题
我目前遇到了一个问题,在JDBCMySQL连接的URL中有一些特殊字符,如Java JDBCMySQL URL和特殊字符的问题,java,mysql,url,jdbc,escaping,Java,Mysql,Url,Jdbc,Escaping,我目前遇到了一个问题,在JDBCMySQL连接的URL中有一些特殊字符,如:。因为它是一个URL,我想我可以对我提供的字符串进行URL编码(比如密码)。但是它不起作用 我尝试了以下代码 public class DatabaseConnection { protected static String urlEncode(String toEncode) { try { return URLEncoder.encode(toEncode, "UTF-
:
。因为它是一个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中的代码,它将java.net.urldecker
应用于键和值,因此我实际上希望它能够工作;不知道发生了什么事
如果用户名和密码存在特定问题,则解决方案是不将其包含在URL中,而是使用以下选项之一:
- 使用正确属性配置的
实现javax.sql.DataSource
- 并在
对象中将用户名和密码作为属性properties
和user
传递(您可以对其他属性执行相同的操作)password
作为旁注:这里不需要像您那样使用
StringBuilder
;如果您使用纯字符串连接,Java编译器将为您优化此操作。遗憾的是,我获取数据源的唯一方法是使用此方法DataSource getDataSource(string jdbcConnection)抛出SQLException
,之后您无法修改它。嗯,我想我必须在库中再深入挖掘一下。@brainsone你可以在中找到MySQL使用的解析方法,它实际上似乎使用了urldecker
,所以我希望你的代码能够使用它。根据该方法的文档,预期的URL格式是jdbc://[:]@/
。那我就试试看。另外,我也不确定我使用的库是使用MySQL连接器/J还是其他库。(使用)