首页 新闻 会员 周边

数据库连接问题(Access denied for user 'root '@'localhost' (using password: YES))

0
悬赏园豆:5 [已解决问题] 解决于 2018-08-11 12:54

问题:运行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();
            }
        }
    }
}
程序员deepz的主页 程序员deepz | 初学一级 | 园豆:199
提问于:2018-08-10 17:56
< >
分享
最佳答案
2

是不是root后面多打了一个空格

看你上面的报错,是root后面多了一块空白

收获园豆:5
Abserver | 菜鸟二级 |园豆:201 | 2018-08-11 11:32

没想到db.properties这种文件都能多空格,我好几次也去看了下。刚看到您的回复,我立马打开eclipse看了一眼,点了userName 光标在 root后面大概一个\t的位置...我就意识到,八九不离十就是这个问题了。运行了下问题解决了。。谢谢。。哈哈...  又一次以为是我的ide有问题。

程序员deepz | 园豆:199 (初学一级) | 2018-08-11 12:55

谢谢...(好傻的错误,盯了两个下午头都是昏的...)

程序员deepz | 园豆:199 (初学一级) | 2018-08-11 12:58
其他回答(1)
0

这种错误跟代码没关系,是你数据库权限的问题

sunan | 园豆:217 (菜鸟二级) | 2018-08-10 23:24

可是我把 getConnection(url,userName,userPassword)中的userName变量换成常量直接变成getConnection(url,"root",userPassword)就可以,真的很奇怪。

换了之后的代码后,数据库要的结果都出来了。这也是权限问题吗?我的用户名root,密码123456这一组用户是可以用的啊?用变量userName存储"root"来传参为什么就会报这种错误。。。

支持(0) 反对(0) 程序员deepz | 园豆:199 (初学一级) | 2018-08-11 01:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册