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

Flutter中sqflite查询SQLite单个整数字段返回类型错误的问题

解决sqflite返回List而非int的问题

错误原因

rawQuery方法的返回值是List<Map<String, Object?>>,对应查询结果的所有行数据,而你的函数声明要返回Future<int>,类型不匹配导致报错。

修改后的代码

Future<int> getCurrencyRate(String symb) async {
  Database db = await instance.database;
  // 使用参数化查询执行SQL,避免SQL注入
  List<Map<String, Object?>> queryResult = await db.rawQuery(
    "SELECT rate FROM Currencies WHERE symb = ?",
    [symb],
  );

  // 处理查询结果
  if (queryResult.isNotEmpty) {
    // 取出第一行的rate字段,转换为int类型
    // 若数据库中rate存储为int,可直接用 result.first["rate"] as int;
    return int.parse(queryResult.first["rate"].toString());
  } else {
    // 无匹配数据时的处理,可根据业务需求返回默认值或抛出异常
    return 0;
    // 可选:抛出异常 throw Exception("未找到符号为$symb的汇率数据");
  }
}

关键说明

  • 参数化查询:替换字符串拼接为?占位符+参数列表,避免SQL注入风险,同时避免符号中含特殊字符导致的SQL语法错误。
  • 结果提取:查询结果是多行数据的列表,通过isNotEmpty判断是否有匹配数据,再从第一行的Map中提取rate字段并转为int。
  • 异常/默认值处理:无匹配数据时,需明确返回逻辑,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:11:31