MySQL查询返回空响应求助(建表正常其他操作无响应)
MySQL查询返回空响应但CREATE TABLE正常的排查与解决
我使用Dart的mysql1包连接MySQL数据库时,执行CREATE TABLE语句能成功创建新表,但发送查询(比如SELECT)时返回空响应,其余查询操作也没有任何响应。以下是测试代码:
import 'package:mysql1/mysql1.dart'; void main() async { final settings = ConnectionSettings( host: '10.0.2.2', port: 3307, user: 'root', password: '#alisher_2001\$', db: 'mbsupermarket', ); final conn = await MySqlConnection.connect(settings); var searchId = 4; var results = await conn.query('SELECT filial_nomi FROM mbsupermarket.filial WHERE id_supermarket = ?', [searchId]); for (var row in results) { print(row[0]); } await conn.close(); }
排查与解决步骤
先验证数据库中是否存在对应数据
直接在MySQL客户端(命令行、Workbench等)执行相同查询:SELECT filial_nomi FROM mbsupermarket.filial WHERE id_supermarket = 4;,如果数据库里本身没有id_supermarket=4的数据,代码返回空是正常的,这时候需要检查数据插入是否正确。检查连接配置细节
- 确认端口号:代码中用的是3307,MySQL默认端口是3306,如果你没修改过MySQL端口配置,可能是端口填错了。虽然CREATE TABLE能成功,但也不排除连接到了其他实例的可能,务必和实际数据库端口一致。
- 验证密码正确性:密码里的
$已经用\$转义,符合Dart字符串规则,但可以用相同密码在客户端登录数据库,确认密码无误。
添加错误捕获与日志输出
原代码没有错误处理,可能查询过程中出现异常但未被捕获,导致看起来“无响应”。修改代码添加try-catch,打印关键信息:import 'package:mysql1/mysql1.dart'; void main() async { MySqlConnection? conn; try { final settings = ConnectionSettings( host: '10.0.2.2', port: 3307, user: 'root', password: '#alisher_2001\$', db: 'mbsupermarket', ); conn = await MySqlConnection.connect(settings); print('数据库连接成功'); var searchId = 4; var results = await conn.query( 'SELECT filial_nomi FROM mbsupermarket.filial WHERE id_supermarket = ?', [searchId]); print('查询结果条数:${results.length}'); for (var row in results) { print(row[0]); } } catch (e) { print('执行出错:$e'); } finally { if (conn != null) { await conn.close(); print('数据库连接已关闭'); } } }运行后查看控制台输出,通过结果条数和错误信息,就能快速定位是无数据还是查询异常。
检查表名、字段名的大小写
MySQL在Linux下默认对表名、字段名大小写敏感,Windows下则不敏感。确认代码中的filial表名、id_supermarket字段名和数据库中的实际名称完全一致,没有大小写错误。确认用户权限
虽然CREATE TABLE能成功,但仍需确认当前用户拥有SELECT权限。可以在MySQL客户端执行:SHOW GRANTS FOR 'root'@'10.0.2.2';(替换为你的连接host),查看权限列表中是否包含SELECT权限。
内容的提问来源于stack exchange,提问作者Alisher
相关产品推荐
相关产品推荐

