我正在尝试使用 JDBC 和 java 程序连接到 MySQL。该程序从属性文件中读取以获取凭据(url、用户名、密码)。我们在密码中使用特殊字符,例如^、&、*、@。
属性文件的一部分如下所示:
mysql.username=bob
mysql.password=th1$is^my@pa$$w*rd (not the real password, but for the sake of discussion)
堆栈跟踪中的错误如下所示: 错误:无法连接到数据库:[43008] 访问被拒绝:用户“bob”@“(使用密码:YES)
我确认该程序能够读取密码(通过将其打印到控制台)。看起来我缺少某种转义序列?
在谷歌上搜索并询问了一些同事,但似乎没有人知道答案。
感谢任何帮助。提前致谢。
最佳答案
the error from the stack trace looks like this: ERROR: unable to connect to db: [43008] Access denied: for user 'bob'@''
这就是您的答案,更具体地说是 'bob'@'' 代码段。这告诉你,在没有主机(或空主机)上使用 bob 正在尝试连接到你的 MySQL 数据库,我几乎可以肯定这不是你想要做的。
解决方案在于确保您有正确的 URL 来连接数据库:
String url = "jdbc:mysql://"+HOST+"/" + DB; //Double check your HOST constant
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url, userName, password);
希望对您有所帮助。干杯
编辑:
看来您正在以正确的方式存储通行证,您应该在属性文件中转义的唯一字符是:
\t \n \r \\ \" \' \ (space) \= \:
关于java jdbc mysql : how to store credentials in properties file with special characters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682949/