【问题标题】:Database is not accessing by the project done in Spring Boot在 Spring Boot 中完成的项目未访问数据库
【发布时间】:2020-12-04 06:04:25
【问题描述】:

我是 Spring Boot 新手,我想用 jdbc 将我的数据库连接到 Spring Boot 项目。它仅对一个数据库成功,当我将数据库名称更改为另一个数据库时,它将不起作用。在我的项目中,我只将数据库连接到 Spring Boot。所以我认为它应该在数据库名称更改时起作用。如果有人可以帮助我解决我的问题,我将不胜感激。

错误

Access denied for user ''@'localhost' to database 'daddycoffeeshop_db'.
and
Error creating bean with name 'jdbcConverter' defined in class path resource

application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/daddycoffeeshop_db
spring.datasource.username=root
spring.datasource.password=      

这里 daddycoffeeshop_db 不工作,但 test 数据库工作。为什么会这样?

其他代码... DaddyCoffeeShoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DaddyCoffeeeShopApplication {

    public static void main(String[] args) {
        SpringApplication.run(DaddyCoffeeeShopApplication.class, args);
    }

}

TestData.java

package com.example.demo;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class TestData implements CommandLineRunner {
    
    @Autowired
    private JdbcTemplate jt;
    
    @Autowired
    private DataSource ds;

    @Override
    public void run(String... args) throws Exception {
        String sql = "INSERT INTO RODUCT_DETAILS VALUES(?,?,?,?)" ;
        int count = jt.update(sql, 10, "A", 234.45,"this is babysoap");
        System.out.print("Inserted Rows" + count);
    }
    

}

【问题讨论】:

  • 该数据库是否具有与测试数据库相同的登录凭据?或者您用来访问 SQL 数据库的用户是否具有访问数据库的权限?
  • 你检查过你本地的“daddycoffeeshop_db”数据库吗?
  • @JaeheonShim 我对我创建的所有数据库都使用相同的登录凭据。
  • 您的属性有误。 spring.datasource.data-username 错误应该是spring.datasource.username 的密码相同。还要删除",除非它确实是您的用户名的一部分。您的密码也是一个空格,我怀疑它是实际密码。
  • 该错误清楚地表明您正在连接没有用户,因此您的属性开始时是错误的。 Access denied for user ''@'localhost' to database 'daddycoffeeshop_db'. 不包含用户名。如果是root@localhost。我怀疑你的密码是空的。

标签: java spring spring-boot jdbc spring-jdbc


【解决方案1】:

我认为你的问题是权威。

请将“daddycopeeshop_db”的数据库角色委派给新帐户而不是 root 帐户。

您还需要开放与外界的访问权限。

【讨论】:

  • 你好@youdozi。我怎样才能做到这一点?你能提供任何我可以检查的参考吗?
  • 1. MySql 控制台访问。 2.创建由'{passwrod}'标识的用户'{user}'@'%'; -> 请输入 {user} 和 {password}。 3.将daddycoffeeshop_db.*上的所有权限授予'{user}@'%'; 4.检查一下。
【解决方案2】:

请尝试以下方法:

将所有权限授予 . 到 'user'@'localhost' WITH GRANT OPTION;

这也可以通过 MySQL 工作台来完成。

【讨论】:

    【解决方案3】:

    按照下面提到的解决步骤,其中之一可能会解决您的问题:

    解决方案 1:

    第一个选项是使用以下命令尝试使用用户名和正确密码登录。此命令将提示您输入密码。输入正确的密码。 Mysql 将验证用户名和密码。如果两者都与现有系统匹配,则 mysql 将允许登录。由于密码无效,抛出“Access denied for user'root'@'localhost'”错误。

    $>mysql -u root -p Enter password:
    

    解决方案 2:

    如果您忘记了 root 用户,以下步骤将帮助您更新您的 root 密码。 root 用户将在 PASSWORD() 函数中使用提供的密码进行修改。在下面的示例中,密码设置为“密码”。此步骤将允许重置 root 用户密码。

    $> mysqld --skip-grant-tables
    
    $> mysql -u root mysql
    
    mysql> update mysql.user set password=PASSWORD("password") where User='root';
    
    mysql> flush privileges;
    

    解决方案 3:

    默认情况下,root 用户不会附加插件。使用插件'mysql native password'更新root用户这个插件'mysql native password'允许本地身份验证。对于任何命令,如果mysql本机密码插件未设置为root用户,则会显示错误“Access denied for user'root'@'localhost'”。

    $> mysqld --skip-grant-tables
    
    $> mysql -u root mysql
    
    mysql> update mysql.user set plugin = 'mysql_native_password' where User='root';
    
    mysql> flush privileges;
    
    $> mysql -u root mysql
    
    mysql> update mysql.user set password=PASSWORD("password") where User='root';
    
    mysql> flush privileges;
    

    解决方案 4:

    必须更改root用户和插件的密码。 alter 命令将更改 root 用户的密码并将插件更新为“mysql 本机密码”。该插件以原生格式存储密码并允许原生身份验证。

    $> mysqld --skip-grant-tables
    
    $> mysql -u root mysql
    
    mysql> ALTER mysql.user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
    mysql> FLUSH PRIVILEGES;
    
    mysql> exit
    
    start mysql again
    

    解决方案 5:

    root 用户拥有管理员权限。为 root 用户提供从本地系统连接的所有权限。 grant 命令会将权限添加到 root 命令。如果要恢复权限,请使用“撤销”命令。 ‘revoke’命令将删除用户的权限。

     mysql> CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
            or
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
    mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
    
    mysql> FLUSH PRIVILEGES;
    

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 2017-09-29
      • 2022-01-17
      • 2017-10-24
      • 1970-01-01
      • 2018-03-30
      • 2021-07-09
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多