我正在使用 java 连接到 mysql。如果我使用安装了 mysql 的同一台电脑连接到 mysql,它工作正常。但是当我从另一台电脑连接到该 mysql 实例时,我的访问被拒绝。 我提到两台电脑都在同一个网络中。
public class Temp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://192.168.0.96:3306/mobile_erp_db";
// Database credentials
static final String USER = "evokanti";
static final String PASS = "evosys12";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM menu";
ResultSet rs = stmt.executeQuery(sql);
// STEP 5: Extract data from result set
while (rs.next()) {
// Retrieve by column name
String first = rs.getString(2);
// Display values
System.out.println(", first: " + first);
}
// STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// Handle errors for JDBC
System.out.println("SQLException");
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
System.out.println("Exception");
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}// end finally try
}// end try
System.out.println("Goodbye!");
}// end main
}// end class
连接网络电脑时的输出。
java.sql.SQLException: Access denied for user 'evokanti'@'EVOKANTILALR' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
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:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at com.db.Temp.main(Temp.java:30)
在上面的错误中,第一行是:
java.sql.SQLException: Access denied for user 'evokanti'@'EVOKANTILALR' (using password: YES)
其中 evokanti 是用户名,EVOKANTILALR 是我的电脑名称。
但我不知道为什么它需要我的电脑名称,即 EVOKANTILALR 连接????
最佳答案
确保用户已正确创建并拥有权限,例如:
CREATE USER 'evokanti'@'%' IDENTIFIED BY 'password';
GRANT ALL ON evokanti.* TO 'evokanti'@'%';
关于java - 使用java连接mysql时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27419103/