Flutter sqflite,从 rawQuery 中检索数据
Flutter sqflite, retreiving data from a rawQuery
我有以下原始查询
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 是一个地图,但仅包含 Resources table 中的四列。 dbItem["r.id"] returns 为空。
dbItems 确实包含一个 "row" 字段,它是一个包含所有字段的数组。有办法访问吗?
如果您查看 dbItem.keys
,您会发现它是 ['id','name',...]
而不是 ['r.id','r.name']
。
您可以使用以下方式访问您的资源 ID:
var resourceId = dbItem['id'] as String;
您可以使用 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
成功了。
我有以下原始查询
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 是一个地图,但仅包含 Resources table 中的四列。 dbItem["r.id"] returns 为空。
dbItems 确实包含一个 "row" 字段,它是一个包含所有字段的数组。有办法访问吗?
如果您查看 dbItem.keys
,您会发现它是 ['id','name',...]
而不是 ['r.id','r.name']
。
您可以使用以下方式访问您的资源 ID:
var resourceId = dbItem['id'] as String;
您可以使用 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
成功了。