Invocation of init method failed; nested exception is io.r2dbc.spi.R2dbcBadGrammarException: [1049] [42000] Unknown database 'public'
时间: 2024-03-02 20:50:33 浏览: 120
这个错误是因为在R2DBC连接字符串中指定了数据库名为"public",但是实际上该数据库不存在。解决这个问题需要你确认以下几个方面:
1. 确认你的R2DBC连接字符串是否正确,包括数据库名、主机名、端口号、用户名和密码等信息。可以通过在命令行中执行"mysql -u <username> -p -h <host> -P <port>"命令来测试数据库连接是否正常。
2. 确认你在数据库中是否已经创建了名为"public"的数据库。如果数据库不存在,可以通过执行"CREATE DATABASE public;"命令来创建。
3. 确认你的应用程序是否具有访问数据库的权限。如果应用程序没有访问数据库的权限,则会出现该错误。
如果你确认了以上几个方面都没有问题,但是仍然出现该错误,可以尝试在R2DBC连接字符串中不指定数据库名,而是在应用程序中通过"USE <database>;"命令来切换到指定的数据库。例如:
```java
ConnectionFactory connectionFactory = ConnectionFactories.get(ConnectionFactoryOptions.builder()
.option(DRIVER, "mysql")
.option(HOST, "localhost")
.option(USER, "root")
.option(PASSWORD, "password")
.option(PORT, 3306)
.option(DATABASE, "testdb")
.build());
Connection connection = Mono.from(connectionFactory.create()).block();
connection.createStatement("USE testdb;").execute().block();
```
这样,应用程序就会在连接数据库后自动切换到名为"testdb"的数据库,而不需要在连接字符串中指定数据库名。
阅读全文