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

Flutter中使用sqljocky5连接MySQL数据库时抛出异常求助

解决Flutter中使用sqljocky5连接MySQL的Query异常问题

先把你的代码整理成规范格式:

void getInfo () async { 
  var pool = new ConnectionPool( 
    host: 'localhost', 
    port: 3305, 
    user: 'root', 
    password: 'mysql', 
    db: 'smartlender', 
    max :5 
  ); 
  print('test'); 
  var results = await pool.query('SELECT employee.firstName FROM smartlender.employee;'); // 异常抛出位置
  results.forEach((row){ 
    names.add(row[0].toString()); 
  }); 
}

结合你的描述(已确认连接正常、SQL语句无误),我给你几个针对性的排查和解决方向:

  • 检查平台兼容性(最常见的坑):
    sqljocky5依赖Dart的dart:io库,只能在**Flutter Desktop(Windows/macOS/Linux)**或者纯Dart后端项目中使用。如果你是在iOS/Android移动端运行Flutter,直接用sqljocky5连接MySQL是行不通的——移动端应用不允许直接访问外部数据库,必须通过后端API接口中转数据。如果是移动端场景,建议你搭建一个简单的后端服务(比如用Dart的Aqueduct、Node.js等),然后Flutter通过HTTP请求和后端交互。

  • 修正主机地址(针对模拟器/远程连接场景):
    如果你是在Android模拟器或iOS模拟器中运行代码,localhost指向的是模拟器本身,而不是你的电脑。这时候需要把host改成:

    • Android模拟器:用10.0.2.2(这是Android模拟器内置的指向宿主电脑的IP)
    • iOS模拟器:可以直接用你的电脑局域网IP(比如192.168.1.100),或者localhost有时候也能生效(iOS模拟器和宿主共享网络栈)
      如果是真实设备,必须用电脑的局域网IP或者公网IP(如果数据库在公网)。
  • 确认MySQL用户权限:
    MySQL默认的root用户只允许从localhost访问,如果你是从模拟器、真实设备或者其他远程IP连接,需要给root用户授权远程访问权限:

    GRANT ALL PRIVILEGES ON smartlender.* TO 'root'@'%' IDENTIFIED BY 'mysql';
    FLUSH PRIVILEGES;
    

    注意:%表示允许从任何IP访问,生产环境建议限制具体IP,避免安全风险。

  • 验证端口配置:
    你指定的端口是3305,请确认你的MySQL服务确实监听这个端口:

    • Windows:查看my.ini文件中的port配置
    • macOS/Linux:查看my.cnf文件中的port配置
      可以用telnet 你的IP 3305或者nc -zv 你的IP 3305测试端口是否能连通。
  • 简化SQL查询语句:
    因为你已经在ConnectionPool中指定了db: 'smartlender',查询的时候不需要再写库名前缀,简化后的SQL更清晰,也避免潜在的解析问题:

    var results = await pool.query('SELECT firstName FROM employee;');
    

最后,建议你在代码中添加异常捕获,这样能看到更详细的错误信息,方便排查:

void getInfo () async { 
  try {
    var pool = new ConnectionPool( 
      host: 'localhost', 
      port: 3305, 
      user: 'root', 
      password: 'mysql', 
      db: 'smartlender', 
      max :5 
    ); 
    print('test'); 
    var results = await pool.query('SELECT firstName FROM employee;');
    results.forEach((row){ 
      names.add(row[0].toString()); 
    }); 
  } catch (e, stackTrace) {
    print('异常信息:$e');
    print('堆栈跟踪:$stackTrace');
  }
}

内容的提问来源于stack exchange,提问作者dinith jayabodhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:25