证书是正确的,数据库名称是正确的,MySQL用户设置正确并拥有所有权限,我有'username'@'%'以及'username'@'localhost'的条目,我可以连接到这个用户通过命令行正确,以及通过mysql工作台。换句话说,除了我的java应用程序无法连接外,一切都按预期工作并按原样设置。
我做了大约3次干净的卸载和MySQL的安装,重启,没有重启,尝试以root身份登录应用程序(带通行证)无法正常工作,尝试以无用密码的用户身份登录app(同样的错误)等等。
此外,使用完全相同的登录功能在localhost上运行的PHP网站也能正常运行。
过去3天我一直在检查和重新检查并尝试所有这些,我查看了所有相关的SO问题,我能找到的所有博客和文档,所有这些。
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost/correctDBname", "correctUsername", "correctPassword");
} catch(ClassNotFoundException | SQLException ex) {
Logger.getLogger(SqlConnection.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
}
MySQL驱动程序名称与项目中NetBeans的“库”部分中显示的完全相同: MySQL JDBC驱动程序 - mysql-connector-java-5.1.23-bin.jar
例外全文:
java.sql.SQLException: Access denied for user 'strada'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at eu.storemedia.stradaserver.engine.SqlConnection.<init>(SqlConnection.java:23)
at eu.storemedia.stradaserver.engine.StradaServer.<init>(StradaServer.java:51)
at eu.storemedia.stradaserver.Home.<clinit>(Home.java:31)
答案 0 :(得分:1)
我建议您仔细阅读MySQL手册中关于连接故障排除的每一条建议。
另外,请检查Connector / J故障排除页面:
后一页包含了这个有用的提示:
注意:除非添加“host”标志,并使用localhost以外的东西作为主机,否则使用mysql命令行客户端测试连接将无法正常工作。如果您使用特殊主机名localhost,mysql命令行客户端将使用Unix域套接字。 如果您正在测试与localhost的连接,请改用127.0.0.1作为主机名。
这说......实际上......你可能不会检查JDBC驱动程序正在使用的实际连接方法。它可能会对身份验证产生影响。
答案 1 :(得分:0)
也许您同时安装了不同版本的mysql,并且您已在环境变量中注册了另一个mysql版本。尝试检查您是否有可以卸载的东西。然后,在环境变量中添加右侧文件夹中的正确mysql。
答案 2 :(得分:0)
...从.txt文件中读取凭据可能很危险,并且在简化它的名义中省略了这个事实是一个错误。
如果我使用硬编码凭据,则登录有效。如果我使用从错误创建的.txt文件中读取的凭据,则会发生错误。如果我使用从正确创建的.txt文件(没有BOM的utf-8)读取的凭据,登录就可以了。
我已经重写了我正在读取凭据的文件是正确的,所以我找不到任何细节,但基本上它包含一些看不见的字符(可能是BOM),这使得凭证无效强>
答案 3 :(得分:0)
拒绝访问用户&#39; strada&#39; @&#39; localhost&#39; (使用密码:是)
Exception解释了以下内容:
<强>修正:强>
答案 4 :(得分:-1)
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/correctDBname", "correctUsername", "correctPassword");