You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:40:04