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
相关产品推荐
相关产品推荐

