Flutter:从Sql_conn返回的JSON提取用户名并转字符串(去空格)
解决Sql_conn查询结果中字符串的空格去除问题
核心解决方案
你的查询结果是List<Map<String, dynamic>>类型,只需从结果集中提取UserName字段,再调用trim()方法即可去除前后所有空格:
修改后的代码示例
如果需要获取处理后的用户名,可调整函数返回类型:
Future<String?> getTrimmedUserName(String userInput) async { try { await SqlConn.connect( ip: "192.16****5", port: "1433", databaseName: "XXXXXXXXX", username: "c***", password: "As******1", ); // 改用参数化查询避免SQL注入风险 var sql = "SELECT UserName FROM Users WHERE UserName = @userInput"; var resultSet = await SqlConn.readData(sql, parameters: {"userInput": userInput}); if (resultSet.isNotEmpty) { // 提取字段并去除前后空格 String trimmedUserName = resultSet.first["UserName"].toString().trim(); print(trimmedUserName); // 输出: Practica1 return trimmedUserName; } return null; } catch (e) { print(e.toString()); return null; } }
如果要保留原checkUserExists函数的逻辑,同时处理空格验证:
Future<bool> checkUserExists(String userInput) async { try { await SqlConn.connect( ip: "192.16****5", port: "1433", databaseName: "XXXXXXXXX", username: "c***", password: "As******1", ); var sql = "SELECT UserName FROM Users WHERE UserName = @userInput"; var resultSet = await SqlConn.readData(sql, parameters: {"userInput": userInput}); if (resultSet.isNotEmpty) { // 同时trim数据库返回值和用户输入,确保匹配准确 String dbUserName = resultSet.first["UserName"].toString().trim(); return dbUserName == userInput.trim(); } return false; } catch (e) { print(e.toString()); return false; } }
关键说明
- 提取字段:
resultSet.first["UserName"]直接获取第一个查询结果的UserName值,因为返回格式是[{"UserName":"xxx"}]这样的列表 - 去除空格:
trim()方法会移除字符串前后的所有空白字符(包括空格、制表符、换行符等) - 安全提醒:原代码使用字符串拼接SQL存在严重的SQL注入风险,必须改用参数化查询(Sql_conn支持通过
parameters传递参数)
内容的提问来源于stack exchange,提问作者Dima C
相关产品推荐
相关产品推荐

