Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
在使用eclipse连接mysql数据库时报异常:
java.sql.sqlexception: access denied for user 'root'@'localhost' (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:57)
at sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45)
at java.lang.reflect.constructor.newinstance(constructor.java:526)
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:571)
at java.sql.drivermanager.getconnection(drivermanager.java:233)
at cn.itcast.mybatis.jdbc.jdbctest.main(jdbctest.java:36)
jdk版本:1.7.0_79,mysql为5.7,使用mysql-connector-java-5.1.18.jar。
代码如下:
import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; /** * * @author lilia * */ public class jdbctest { //mysql数据库地址 private static final string url = "jdbc:mysql://localhost:3306/mybatis?characterencoding=utf-8"; //mysql数据库用户名 private static final string username = "root"; //myslq数据库密码 private static final string password = "root"; public static void main(string[] args) { //数据库连接 connection connection = null; //预编译的statement(使用预编译的statement可以提高数据库的性能) preparedstatement preparedstatement = null; //结果集对象 resultset resultset = null; try { //加载数据驱动 class.forname("com.mysql.jdbc.driver"); //通过驱动管理类获取数据库连接 connection = drivermanager.getconnection(url, username, password); //定义sql语句 string sql = "select * from user where username = ?"; //获取预处理statement,并把sql放入到statement中。 preparedstatement = connection.preparestatement(sql); //参数赋值,序号从1开始 preparedstatement.setstring(1, "王五"); //向数据库发出sql执行查询,并返回查询结果集 resultset = preparedstatement.executequery(); while (resultset.next()) { system.out.println(resultset.getstring("id") + ":" + resultset.getstring("username")); } } catch (exception e) { e.printstacktrace(); } finally { //释放资源 if (resultset != null) { try { resultset.close(); } catch (sqlexception e) { e.printstacktrace(); } } if(preparedstatement != null){ try { preparedstatement.close(); } catch (sqlexception e) { e.printstacktrace(); } } if(connection != null){ try { connection.close(); } catch (sqlexception e) { e.printstacktrace(); } } } } }
执行后报错如上。
网上搜索很多解决方案行不通,最终找到问题所在:root帐户默认不开放远程访问权限,所以需要修改一下相关权限。,参考:
具体解决步骤如下:
- 打开mysql目录下的my.ini文件(win10默认安装在c:\programdata\mysql\mysql server 5.7\my.ini),在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。
- 重启mysql服务,通过服务管理器(服务名称:mysql57)或者cmd(>net stop mysql57 >net start mysql57)都行。
- 通过命令行进入mysql的安装目录bin下(win10默认安装,bin目录为:c:\program files\mysql\mysql server 5.7\bin,如果配置过mysql环境变量可不进入该目录,直接执行命令),输入“mysql -u root -p”(不输入密码),提示输入密码不用管,直接enter回车即可进入数据库。
- 执行“use mysql;”,使用mysql数据库。
- 执行命令“update user set authentication_string=password("root") where user='root';”(修改root的密码)。
- 打开mysql目录下的my.ini文件,删除最后一行的“skip-grant-tables”,保存并关闭文件。
- 重启mysql服务。
- 重新执行代码,执行成功。
问题解决。
上一篇: linux学习 - 基本命令篇
下一篇: 武则天退位之后,为什么没有人杀她?
推荐阅读
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决
-
java访问数据库被拒绝,不能连接数据库ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决方法
-
Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
-
无法通过程序连接MySQL:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决方法
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决
-
Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决
-
java访问数据库被拒绝,不能连接数据库ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)