Dart用mysql1执行SELECT无结果,增改操作正常求助
Flutter/Dart mysql1包查询返回空结果集但增改操作正常
问题描述
近期开发Flutter/Dart项目,使用mysql1包连接MySQL数据库,能正常执行建表、插入数据操作(比如执行插入语句后,在SQL Workbench中能看到新增的记录),但执行select * from Account查询时,控制台仅输出空的(),而在Workbench中执行相同查询能返回测试数据。
使用的代码如下:
import 'dart:async'; import 'package:mysql1/mysql1.dart'; Future main() async { // Open a connection (testdb should already exist) final connection = await MySqlConnection.connect(new ConnectionSettings( host: '10.0.2.2', port: 3306, user: 'root', password: 'gDrP^6W42f9Z', db: 'EntomologyApp', )); var results = await connection.query('select * from Account'); // expected results print(results); // Finally, close the connection await connection.close(); }
排查及解决方法
1. 检查表名大小写一致性
MySQL在Linux/macOS环境下默认区分表名大小写,Windows下则不区分。如果代码中写的Account和数据库实际表名(比如小写account)不一致,会导致查询返回空结果。
- 解决:确保代码中的表名与数据库中实际表名完全匹配;或者修改MySQL的
lower_case_table_names配置,统一大小写处理规则。
2. 验证结果集的正确遍历方式
mysql1包返回的Results对象是一个可迭代的集合,直接打印results只会输出容器结构,不会显示实际数据。尝试遍历结果集查看内容:
var results = await connection.query('select * from Account'); // 遍历每一行数据并打印 for (var row in results) { print('email: ${row['email']}, password: ${row['password']}'); }
3. 确认连接的数据库实例一致
虽然能正常插入数据,但需确认代码连接的数据库与Workbench操作的是同一个实例:
- 在代码中执行插入语句后,立刻执行查询,查看是否能获取到刚插入的记录。如果能查到,说明Workbench操作的是另一个数据库实例;如果仍查不到,继续排查其他原因。
4. 排查事务状态
如果之前有开启事务但未提交,可能导致查询无法读取数据(不过此情况概率较低,因为你在Workbench中能看到插入的记录)。可以在查询前手动提交事务尝试:
await connection.query('COMMIT'); var results = await connection.query('select * from Account');
内容的提问来源于stack exchange,提问作者NathanGillespie
相关产品推荐
相关产品推荐

