flyway maven plugin无法正常使用: Unable to connect to the database. Configure the url, user and password!...

在pom.xml依赖中添加configuration内容,如下:

<plugin>
				<groupId>org.flywaydb</groupId>
				<artifactId>flyway-maven-plugin</artifactId>
				<version>4.2.0</version>
				<!--	configuration配置 url,user,password不然plugin无法正常使用			-->
				<configuration>
					<url>jdbc:mysql://localhost:3306/scis?useUnicode=true&amp;zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true&amp;characterEncoding=utf-8&amp;serverTimezone=CTT</url>
					<user>root</user>
					<password>123456</password>
				</configuration>
			</plugin>

测试flyway info执行结果:

"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" -Dmaven.multiModuleProjectDirectory=D:\springgw\scis-master -Dmaven.home=D:\apache-maven-3.6.3 -Dclassworlds.conf=D:\apache-maven-3.6.3\bin\m2.conf "-Dmaven.ext.class.path=D:\IntelliJ IDEA 2020.1.2\plugins\maven\lib\maven-event-listener.jar" "-javaagent:D:\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=57367:D:\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath D:\apache-maven-3.6.3\boot\plexus-classworlds-2.6.0.jar;D:\apache-maven-3.6.3\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version2020.1.2 -s D:\apache-maven-3.6.3\conf\settings.xml -Dmaven.repo.local=D:\apache-maven-3.6.3\repository org.flywaydb:flyway-maven-plugin:4.2.0:info
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< com.jcohy:scis >---------------------------
[INFO] Building scis 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:4.2.0:info (default-cli) @ scis ---
[INFO] Flyway 4.2.0 by Boxfuse
Thu Jul 09 09:13:11 GMT+08:00 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[INFO] Database: jdbc:mysql://rm-2zed2d1o5ujtu72g7no.mysql.rds.aliyuncs.com:3306/scis?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&serverTimezone=CTT (MySQL 8.0)
[INFO] 
+------------------+------------------------+---------------------+---------+
| Version          | Description            | Installed on        | State   |
+------------------+------------------------+---------------------+---------+
| 1.0.0.20180406.1 | SCIS DB INIT           | 2020-06-29 14:46:08 | Success |
| 1.0.0.20180407.1 | ADD  TABLE ALLOTPRO    | 2020-06-29 14:46:10 | Success |
| 1.0.0.20180410.2 | ADD  TABLE Notice      | 2020-06-29 14:46:11 | Success |
| 1.0.0.20180416.1 | ADD  TABLE FIELD       | 2020-06-29 14:46:13 | Success |
| 1.0.0.20180416.2 | ADD  SOME DATA         | 2020-06-29 14:46:16 | Success |
| 1.0.0.20180510.1 | ADD  TABLE CIRCULAR    | 2020-06-29 14:46:18 | Success |
| 1.0.0.20180510.2 | ADD  TABLE FIELD       | 2020-06-29 14:46:19 | Success |
| 1.0.0.20180510.3 | ADD  TABLE FIELD       | 2020-06-29 14:46:20 | Success |
| 1.0.0.20180517.1 | ADD  TABLE FIELD       | 2020-06-29 14:46:21 | Success |
| 1.0.0.20180517.2 | ADD  FORGIN KEY        | 2020-06-29 14:46:23 | Success |
| 1.0.0.20180517.3 | CHANGE  CIRCULAR FIELD | 2020-06-29 14:46:24 | Success |
| 1.0.0.20180518.1 | ADD PROJECT DATE       | 2020-06-29 14:46:26 | Success |
| 1.0.0.20180522.1 | DELETE PROJECT FIELD   | 2020-06-29 14:46:27 | Success |
| 1.0.0.20180524.1 | CHANGE  NUM FIELD      | 2020-06-29 14:46:29 | Success |
| 1.0.0.20180525.1 | ADD DEPT FIELD         | 2020-06-29 14:46:31 | Success |
| 1.0.0.20180527.1 | ADD DEPT FIELD         | 2020-06-29 14:46:33 | Success |
| 2.0.0.20200708.1 | SCIS DB INIT           | 2020-07-08 17:50:50 | Success |
+------------------+------------------------+---------------------+---------+

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.237 s
[INFO] Finished at: 2020-07-09T09:13:12+08:00
[INFO] ------------------------------------------------------------------------
<think>嗯,用户遇到了MySQL中表不存在导致数据写入失败的问题,具体错误是表'qtmysql.test_results'不存在,导致无法执行查询。我需要帮他们找到解决方案。首先,我应该考虑这个问题的常见原因和解决方法。 首先,用户可能没有创建这个表。可能他们迁移数据或者运行脚本的时候忘记创建表了。这时候需要检查表是否存在,如果不存在的话,就要创建表结构。用户可以使用`SHOW TABLES`或者`CREATE TABLE`语句来处理。这部分可能需要用户确认表结构是否正确,比如字段、数据类型等。 然后,数据库或表名的大小写问题也可能导致错误。因为MySQL在Linux系统下是区分大小写的,而在Windows下不区分。如果用户在不同的操作系统间迁移数据库,可能会出现这个问题。需要确认表名的大小写是否正确,或者在创建表时使用反引号来避免关键字冲突。 接下来,数据库名称是否正确?用户提到的表是'qtmysql.test_results',也就是数据库qtmysql下的test_results表。用户可能连接到了错误的数据库,或者数据库名称拼写错误。这时候应该检查当前连接的数据库,使用`SELECT DATABASE();`来确认,或者使用`USE qtmysql;`切换到正确的数据库。 权限问题也不能忽视。可能用户使用的MySQL账户没有访问该表的权限,或者没有对数据库的操作权限。需要检查用户的权限,使用`GRANT`语句赋予相应的权限,比如SELECT、INSERT等。 还有可能是代码中引用的表名拼写错误。用户可能在代码里写错了表名或者数据库名,比如大小写不一致或者拼写错误。这时候需要仔细检查代码中的SQL语句,确保和数据库中的实际名称一致。 另外,如果用户的应用程序使用了ORM框架,比如Hibernate,可能需要检查实体类与数据库表的映射是否正确,包括注解或配置文件中是否指定了正确的表名和数据库名。 此外,如果用户是通过编程语言(如Python、Java)连接MySQL,确保连接字符串中的数据库名称正确,没有拼写错误。例如,在Python中使用MySQL Connector时,连接参数中的database是否设置为qtmysql。 还有一个可能性是数据库连接到了错误的实例,或者有多个数据库实例存在,导致表不在当前连接的实例中。需要确认连接的MySQL服务器是否正确,是否有多个服务器配置混淆的情况。 在解决问题之后,用户可能需要预防这类问题再次发生。比如在代码中加入表存在性检查,使用`CREATE TABLE IF NOT EXISTS`来创建表,或者在写入数据前先执行检查。此外,自动化脚本或迁移工具(如Flyway、Liquibase)可以帮助管理数据库版本,确保表结构正确。 最后,用户提到的引用中有关于Python查询MySQL和JDBC驱动的问题,可能需要检查依赖库是否正确安装,比如Python中的mysql-connector-python或Java中的JDBC驱动,避免因为驱动问题导致连接失败,进而引发其他错误。</think>### 解决 MySQL 表不存在导致数据写入失败的方法 #### 问题分析 当执行数据写入操作时,若出现错误提示 **表 'qtmysql.test_results' 不存在**,通常由以下原因导致: 1. **表未创建**:目标表未在数据库中定义。 2. **表名或数据库名拼写错误**:大小写不一致或拼写错误(MySQL 在 Linux 下默认区分大小写)。 3. **权限问题**:当前用户对数据库或表无操作权限。 4. **连接错误**:代码中未正确指定数据库或连接到了错误的数据库实例[^1][^2]。 --- #### 逐步解决方案 ##### 1. 确认表是否存在 通过 MySQL 命令行或客户端工具执行以下语句,检查表是否已创建: ```sql SHOW TABLES FROM qtmysql LIKE 'test_results'; ``` - **若返回空结果**:需创建表,例如: ```sql CREATE TABLE qtmysql.test_results ( id INT PRIMARY KEY AUTO_INCREMENT, test_name VARCHAR(255), result VARCHAR(50) ); ``` ##### 2. 检查表名和数据库名 - **大小写敏感性**:在 Linux 系统中,MySQL 默认区分大小写。确保代码中的表名与数据库中的实际名称完全一致。 - **使用反引号**:若表名含特殊字符或关键字,需用反引号包裹: ```sql INSERT INTO `qtmysql`.`test_results` (...) VALUES (...); ``` ##### 3. 验证数据库连接配置 检查代码中的数据库连接参数(如 Python、Java 等): ```python # Python 示例 import mysql.connector conn = mysql.connector.connect( host="localhost", user="root", password="password", database="qtmysql" # 确保此处数据库名正确 ) ``` ##### 4. 检查用户权限 确保当前 MySQL 用户对 `qtmysql` 数据库有操作权限: ```sql GRANT SELECT, INSERT, UPDATE ON qtmysql.* TO 'username'@'localhost'; FLUSH PRIVILEGES; ``` ##### 5. 代码中添加容错逻辑 在写入数据前检查表是否存在: ```python # Python 示例 cursor = conn.cursor() cursor.execute("SHOW TABLES LIKE 'test_results'") if not cursor.fetchone(): cursor.execute("CREATE TABLE test_results (...)") conn.commit() ``` --- #### 预防措施 - **自动化表管理**:使用迁移工具(如 Flyway 或 Alembic)确保表结构与代码同步。 - **统一命名规范**:避免混合大小写和特殊字符。 - **错误日志记录**:捕获数据库异常并记录详细信息[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生莫如饥荒

如果对您有帮助,也可以给点赏钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值