次のコード:
Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
getConnection()
でこの例外をスローします:
Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4006)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:919)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.Java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1244)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2397)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2430)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2215)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
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:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:334)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at db.Database.<init>(Database.Java:91)
at db.Main.main(Main.Java:10)
これはどのように引き起こされ、どうすれば解決できますか?
編集:
public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException
{
try
{
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
Statement s = (Statement) conn.createStatement();
int result = s.executeUpdate("CREATE DATABASE databasename");
}
catch ( Exception e)
{
e.printStackTrace();
}
}
生産物:
Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4006)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:919)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.Java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1244)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2397)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2430)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2215)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
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:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:334)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at db.Main.main(Main.Java:19)
データベースをゼロから作成する場合、次を使用できます。
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();
同一のシナリオ です。
これはあなたを助けることができます:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;
コマンドラインまたはGUIツールで実行します。
%password%
を実際のパスワードに置き換えることを忘れないでください。
同様の問題がありましたが、違いは次のとおりでした。JavaAppをlocalhost
からではなく、リモートPCから実行しました。 Java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)
のようなものを得ました。これを解決するには、単にphpMyAdminにログインし、Users
に移動し、add user
をクリックして、JavaAppを実行するホストを入力します(またはAny Host
)
これを使用できます
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME";
static final String USER = "root";
static final String PASS = "YOUR_ROOT_PASSWORD";
Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
正しいルートパスワードを入力する必要があります。
これは、Ubuntu 18.04 LTSおよびMySQL 5.xに固有です。これに続きます link ここから先はすべてに従ってください:
Sudo mysql_secure_installation
Sudo mysql
MySQLにログインしたら、MySQLプロンプトから次のコマンドを実行します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
次に、テーブルにルートのパスワードがあることを確認します
SELECT user,authentication_string,plugin,Host FROM mysql.user;
これで問題が解決し、ログインできるようになりました。
接続するデータベースを指定する必要があります。
jdbc:mysql://localhost:3306/mydb
同じ問題「Java.sql.SQLException:ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)」がありました。問題は「間違ったパスワード」でした。クエリをそのままシェルにコピーして貼り付け、目的の出力が得られるかどうかを確認します。小さなエラーはより多くの時間を消費します。
この例外は、mysql dbとpom.xml/jarのバージョンの不一致が原因でも発生します。
Pom.xml/jarバージョンがmysql dbバージョンよりも高いことを確認してください。上位バージョンは下位バージョンと互換性がありますが、逆バージョンについては同じではありません。
Javaプロジェクトのソリューション
Mavenベースのソリューション
スプリングブートのソリューション-5.1.5.Finalを追加して、スプリングブートの依存関係をオーバーライドします
これが問題の原因ではないかもしれませんが、同じポートで2つのMySQLサービスが実行されている場合、同じエラーが発生します。タスクマネージャの[サービス]タブでサービスのリストを見ると、ウィンドウで確認できます。
これは、MySQLのユーザー名とパスワードが正しくない場合にほとんど発生するようです。 MySQLのユーザー名とパスワードを確認してください。
同じ問題にぶつかりました。 mysqlサービスのポート番号(3307)を追加し、問題を解決しました。
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");
このようにしてみてください。
public static Connection getConnection() throws SQLException{
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "vicky"; // Change it to your Password
System.setProperty(driver,"");
return DriverManager.getConnection(url,username,password);
}
宣言の順序:
順番に宣言する場合
アプリケーションは失敗します
Javaを使用してローカルマシンからリモートmysqlサーバーを接続する場合は、以下の手順を参照してください。エラー:「Java.sql.SQLException:ユーザー 'xxxxx'@'101.123.163.141'のアクセスが拒否されました(パスワードを使用:YES)」
リモートアクセスの場合、cpanelまたは他のユーザーがローカルIPアドレスのリモートアクセスを許可する場合があります。
上記のエラーメッセージ:「101.123.163.141」はローカルマシンのIPです。そのため、最初にCpanel-> RemoteMySQL®でリモートアクセスを提供する必要があります。次に、アプリケーションを実行して接続します。
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(
"jdbc:mysql://www.xyz.com/abc","def","ghi");
//here abc is database name, def is username and ghi
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from employee");
while(rs.next())
System.out.println(rs.getInt(1)+" "+rs.getString(2)+"
"+rs.getString(3));
con.close();
それがあなたの問題を解決することを願っています。
ありがとう
SQLセットアップ(私の場合はDreamhost)を変更して、ユーザー名がIDEからプログラムを実行しているため、Dreamhostだけでなく他のホストからデータベースにアクセスできるようにしなければなりませんでしたコンピューター。ここでは、%を許可可能なホストのリストに追加して、これを行いました。動作するようになりました!