【发布时间】:2016-01-19 11:13:51
【问题描述】:
我正在使用以下代码并收到此错误:
Access denied for user 'root'@'localhost' (using password: YES)
java.lang.NullPointerException
我使用了 stackoverflow 中的几种解决方案。但是问题没有解决!请提供您的解决方案。
只插入一次,但后来我遇到了上述错误。
我的 Java 代码:
package DBConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import com.mysql.jdbc.PreparedStatement;
public class Main {
public static void main(String[] args) throws Exception {
insert();
}
public static void insert() throws Exception{
final String var1 = "test1";
final String var2 = "تست2";
final String var3 = "test.com";
try{
Connection conn = getConnection();
PreparedStatement inserted = (PreparedStatement) conn.prepareStatement("INSERT INTO wpsjim_target_sites (site_name_en,site_name_fa,site_address) VALUES('"+var1+"','"+var2+"','"+var3+"')");
inserted.execute();
}catch(Exception e){
System.out.println(e);
}finally{
System.out.println("Insert Completed!");
}
}
public static Connection getConnection() throws Exception{
try{
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/simjin";
String username = "root";
String password = "rootpass";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,username,password);
System.out.println("Connected");
return conn;
} catch(Exception e){
System.out.println(e.getMessage());
}
return null;
}
}
更新:
当我使用e.printStackTrace(System.out); 在控制台上显示以下消息:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
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:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DBConnection.Main.getConnection(Main.java:34)
at DBConnection.Main.insert(Main.java:17)
at DBConnection.Main.main(Main.java:9)
java.lang.NullPointerException
【问题讨论】:
-
你的数据库用户是使用密码还是不使用密码?
-
如果您正在努力调试,请不要使用
System.out.println(e.getMessage());,它只会打印消息。使用e.printStackTrace(System.out)(如果您确实需要将其打印到System.out;否则,e.printStackTrace()更容易)。 -
@AndyTurner 我使用
e.printStackTrace(System.out)并更新我的问题。 -
@ArshadAli 是的,我的数据库用户使用密码。 Mysql 密码为
rootpass。该密码已成功用于其他应用程序。