jdbc连接到mysql,由于项目编码utf-16而失败

63lcw9qa  于 2021-06-23  发布在  Mysql
关注(0)|答案(0)|浏览(216)

这个问题在这里已经有答案了

java.sql.sqlexception:拒绝用户“root”@“localhost”的访问(使用密码:yes)(24个答案)
java.sql.sqlexception:拒绝访问用户的root@localhost'@'localhost'(使用密码:是)(9个答案)
拒绝访问用户“root”@“localhost”(3个答案)
java.sql.sqlexception:拒绝用户“root”@“localhost”的访问(使用密码:否)(5个答案)
java mysql-拒绝用户“root”@“localhost”的访问(使用密码:yes)[重复](3个答案)
两年前关门了。
我试图创建一个后台服务,所以我创建了一个普通的java项目。以下是我尝试连接到数据库的代码:

Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection(
                "jdbc:mysql://127.0.0.1:3306/test_db", "root", "root");
    Statement stmt = con.createStatement();

但是每次我运行这个代码,它都失败了:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)

问题是,在我的另一个maven项目上使用相同的代码,它是有效的。所以url、用户名、密码和用户权限应该没有问题(已经有其他项目连接到同一个db,使用同一个用户,但使用hibernate)。我想可能有一些库丢失了,所以我复制了从maven项目导出的所有jar文件并添加到这个java项目中,但它仍然无法连接到数据库。我还尝试将mysql连接器更改为最新版本,同样的情况仍然发生。
有人能告诉我拒绝访问的可能原因吗?谢谢您。
===================================================================================更改为连接器版本5.1.8时出现更新日志错误

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3468)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:917)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3974)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1282)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:773)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)

=====================================================================================================从mysql.user表更新select

+---------+-----------+
| user    | host      |
+---------+-----------+
| newuser | localhost |
| root    | localhost |
+---------+-----------+
2 rows in set (0.00 sec)

================================================================================================答案:确定此问题已解决。因为所有这些人都来把这个标记为复制品,这使我无法回答自己的问题。所以如果有人像我一样犯了这个愚蠢的错误,我会把答案放在这里:
我的项目编码默认设置为utf-16。我忘了像往常一样把这个换成utf-8
当我将密码存储在项目的某个地方(java文件、属性文件)时,这个密码也存储在utf-16中,因此它实际上与我在工具上看到的不同。
当应用程序读取密码并将其发送到mysql时,由于密码不正确,authen失败。
=>更新项目和文件,设置编码为utf-8解决我的问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题