我正在使用一些sqflite对数据库进行查询,并提取表的特定名称,例如:我有3个名称,Roberto,Ricardo和Andres,我只想获取Roberto的名称。 ,这就是我在做什么:
loginLogic() async {
var X = 'Roberto';
final db = await database;
List<Map> result = await db.rawQuery('SELECT * FROM Usuario WHERE username=?', [X]);
所以现在,我想将此结果与另一个结果进行比较,以执行“ if”功能,如下所示:
if(result==X){
return 1;
} else {
return 0;
}
但这就是扑扑所说的:
List<Map<dynamic, dynamic>> result
Equality operator '==' invocation with references of unrelated
和调试控制台:
type 'Future<dynamic>' is not a subtype of type 'int'
因此,我需要一种将用户列表中的值与带有我声明为'X'的变量的字符串进行比较的方法。
尝试使用this problem的引用
这是我尝试过的:
loginLogicpar() async {
var X = 'Giova';
final db = await database;
final result = await db.rawQuery('SELECT * FROM Usuario WHERE username=?', [X]);
return result;
}
loginLogic() async {
var X = 'Giova';
final user = await loginLogicpar();
if(user==X){
return 1;
}
return 0;
}
并返回完全相同的结果:类型'Future'不是类型'int'的子类型
添加了the code,以便您可以复制它,只需确保您的依赖项上有sqflite。
答案 0 :(得分:0)
这是一条路的地狱,但是我在大家的帮助下成功了,但是最后一块是@mutantkeyboard,我得到的是Sqflite表中不同元素的列表,但是在转换之后它带有一个变量和.first函数,我将其转换为另一个变量!这是我做的:
loginLogic() async {
final db = await database;
var table = await db.rawQuery("SELECT MAX(id)+1 as id FROM Usuario");
int id = table.last["id"];
for(var i=1; i<id; i++){
var result = await db.rawQuery('SELECT username FROM Usuario WHERE id=?', [i]);
String Y = result.first["username"];
if(Y=='Roberto'){
return 1;
}
}
return 0;
}
如果您想将其与外部变量(例如,本地登录的身份验证)进行比较(这就是我在做的,只是出于教育目的,我绝不建议您将用户名和密码放在您的计算机中本地软件),然后将textfield.text与表进行比较,然后您可以将代码修改为如下形式:
loginLogic(String field) async {
final db = await database;
var table = await db.rawQuery("SELECT MAX(id)+1 as id FROM Usuario");
int id = table.last["id"];
for(var i=1; i<id; i++){
var result = await db.rawQuery('SELECT username FROM Usuario WHERE id=?', [i]);
String Y = result.first["username"];
if(Y==field){
return 1;
}
}
return 0;
}