问题:运行javaweb项目的时候报了这个错误Access denied for user 'root '@'localhost' (using password: YES)
我上百度搜了很久,说是权限问题,或者修改下密码之类的,但是显然不是我遇到的问题。
给大家看一下我的代码(报错):
下面就是我的代码,其他地方的应该就不用黏贴了吧。
神奇的地方是,我把getConnection()方法中return中DriverManager.getConnection(url,userName,userPassword);
中的userName变量换成常量"root"程序就能正常执行,我真的很苦恼。
每次遇到这种奇怪的问题我都会觉得是我的ide有问题,可是最后事实证明是某些小细节,但是我这次还是奇怪是不是我的ide有问题,因为我上几个小项目也是这样的写法除了类名有变更,基本代码一致,可是偏偏我这个会报错。。求解啊。。。头疼
package deep.common; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; /** * jdbc数据帮助类 * @author DeepSleeping * */ public class DBUtil { private static String driver; private static String url; private static String userName; private static String userPassword; //获取连接 static{ try { InputStream ins = DBUtil.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(ins); //获取数据库连接必要数据 driver = prop.getProperty("driver"); url = prop.getProperty("url"); userName = prop.getProperty("userName"); userPassword = prop.getProperty("userPassword"); System.out.println("driver = " + driver); System.out.println("url = " + url); System.out.println("userName = " + userName); System.out.println("userPassword = " + userPassword); //加载驱动 Class.forName(driver); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 获取连接 * @return * @throws SQLException */ public static Connection getConnection() throws SQLException{ /*用变量userName就会出错不知道为什么*/ return DriverManager.getConnection(url,userName,userPassword); } /** * 释放连接 */ public static void release(Connection conn,PreparedStatement ps,ResultSet rs){ if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
是不是root后面多打了一个空格
看你上面的报错,是root后面多了一块空白
没想到db.properties这种文件都能多空格,我好几次也去看了下。刚看到您的回复,我立马打开eclipse看了一眼,点了userName 光标在 root后面大概一个\t的位置...我就意识到,八九不离十就是这个问题了。运行了下问题解决了。。谢谢。。哈哈... 又一次以为是我的ide有问题。
谢谢...(好傻的错误,盯了两个下午头都是昏的...)
这种错误跟代码没关系,是你数据库权限的问题
可是我把 getConnection(url,userName,userPassword)中的userName变量换成常量直接变成getConnection(url,"root",userPassword)就可以,真的很奇怪。
换了之后的代码后,数据库要的结果都出来了。这也是权限问题吗?我的用户名root,密码123456这一组用户是可以用的啊?用变量userName存储"root"来传参为什么就会报这种错误。。。