我尝试连接到Mac上的MySQL数据库。这个MySQL是用MAMP安装的。使用phpMyAdmin和CLI时,我可以连接到数据库。但是当我尝试通过Java连接时,会发生以下错误:
java.sql.SQLException: Access denied for user 'admin'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:926)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4732)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1340)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at Hello.main(Hello.java:11)
这是我的java代码:
import java.sql.Connection;
import java.sql.DriverManager;
public class Hello {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
//String url ="jdbc:mysql://localhost/xinandasai?user=root&password=root&useUnicode=true&characterEncoding=8859_1";
//Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/xinandasai","admin","cosmo");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/xinandasai?" + "user=admin&password=cosmo");
//Statement statement = conn.createStatement();
//statement.execute("INSERT INTO test (user) VALUES ('"+user+"')");
//conn.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
我检查了配置。我确信这些问题:
用户名和密码正确,因为使用CLI时它们是正确的。
使用SQL语句授予所有权限:&#34;在上授予所有权限。 TO&#39; admin&#39; @&#39; localhost&#39;通过&#39; cosmo&#39;识别WITH GRANT OPTION;&#34;
我该如何解决这个问题?
可能与版本相关吗?我的MySQL版本是5.5.25。连接器版本为5.1.30
答案 0 :(得分:0)
我在这段代码中没有看到任何错误。一般语法是
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
conn.close();
我可以看到你在注释的字符串中尝试了这个组合,但尝试用ip替换localhost可能会起作用。您可以使用ipconfig命令
通过命令提示符获取machin ipConnection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/xinandasai","admin","cosmo");
在此之前,您必须授予对所有IP的访问权限
GRANT ALL PRIVILEGES ON db.* TO db_user @'%' IDENTIFIED BY 'db_passwd';
%是ip地址的通配符
答案 1 :(得分:0)
无论如何,它与Connector版本无关。我已经尝试使用版本5.1.30和5.1.13的相同代码并且两者兼而有之。 我也尝试了两种重载方法:
c = DriverManager.getConnection(URL+DBNAME, LOGIN, PASSWORD);
和
c = DriverManager.getConnection("jdbc:mysql://localhost/universite?" + "user=root&password=root");
适用于两个版本
尽量确保您拥有所有IP地址的访问权限。