Flutter flatter sqflite,从rawQuery检索数据

Flutter flatter sqflite,从rawQuery检索数据,flutter,dart,sqflite,Flutter,Dart,Sqflite,我有以下疑问 final maps = await db.rawQuery(""" select r.id, r.name, r.description,r.created_by, a.id,a.name,a.description from Resources r left join Resource_Attribute ra on ra.resource_id = r.id left join AttributeItems a on ra.attribute_id=a.id """);

我有以下疑问

final maps = await db.rawQuery("""
select r.id, r.name, r.description,r.created_by,
a.id,a.name,a.description from Resources r 
left join Resource_Attribute ra on ra.resource_id = r.id
left join AttributeItems a on ra.attribute_id=a.id
""");
我的问题是如何从查询中的所有列检索数据?执行以下操作

 maps.forEach((dbItem){
     String resourceId = dbItem["r.id"];
似乎不起作用dbItems是一个映射,但只包含资源表中的四列。dbItem[“r.id”]返回空值


dbItems确实包含一个“行”字段,该字段是包含所有字段的数组。有办法访问它吗?

如果您查看
dbItem.keys
,您将看到它是
['id','name',…]
而不是
['r.id','r.name']

您可以使用以下方式访问资源id:

var resourceId=dbItem['id']作为字符串;
您可以使用
AS
明确地命名列。例如:

var resultSet = await db.rawQuery("SELECT r.id AS r_id FROM test r");
// Get first result
var dbItem = resultSet.first;
// Access its id
var resourceId = dbItem['r_id'] as String;

正如alextk所建议的,我将查询改为

    select r.id as resource_id, r.name as resource_name, r.description as resource_descr,r.created_by as resource_created_by,
a.id as attribute_id,a.name as attribute_name,a.description as attribute_descr from Resources r 
left join Resource_Attribute ra on ra.resource_id = r.id
left join AttributeItems a on ra.attribute_id=a.id

对于测试:
maps.forEach(print)
,您看到了什么?我只看到了作为资源表一部分的4列:id、name、description和created by。似乎
a.id、a.name、a.description
在您的
AttributeItems
表中不存在给定的join,我前面提到的行字段也包含它们。是否尝试使用工具来确定?谢谢,这很有效,我按照您的建议将查询更改为使用列,现在映射包含所有七列