关联表 SQL 查询 |
SQL 查询支持设置其他查询条件,如:属性过滤条件(attributeFilter)、分组条件(groupBy)、查询 id 数组(ids)、关联查询项数组(joinItems)、关联外部表(linkItems)、SQL 查询排序的字段(orderBy)等信息。现以关联外部表(LinkItem)为例,构建一个简单 SQL 查询:获取世界地图的 Countries@World 图层 与 Capitals@World 图层中 Capital 字段值相等的数据记录。
对于该 SQL 查询,主要传递参数:queryMode 和 queryParameters。queryMode 说明查询模式(这里是 SqlQuery),queryParameters 是查询的参数,构建查询代码如下:
//关联外表 SQL 查询
function SQLQueryByLinkItem()
{
var commit=getcommit();
var uri="http://localhost:8090/iserver/services/map-world/rest/maps/World Map/queryResults.rjson";
//设置请求体参数
var entry={};
entry.queryMode="SqlQuery";
entry.queryParameters={
"startRecord": 0,
"queryParams": [{
"name": "Capitals@world",
"linkItems": [{
"datasourceConnectionInfo": {
"engineType": "UDB",
"readOnly": false,
"connect": true,
"openLinkTable": false,
"alias": "World",
"exclusive": false
},
"name": null,
"foreignKeys": ["Capital"],
"primaryKeys": ["Capital"],
"linkFilter": "Capital = Capital",
"foreignTable": "Countries"
}]
}],
"expectCount": 100000,
"queryOption": "ATTRIBUTEANDGEOMETRY"
};
commit.open("POST",encodeURI(uri),false,"","");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//alert(toJSON(entry));
commit.send(toJSON(entry));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
//获取用作显示的 Div 容器。
var container = document.getElementById('container');
container.innerHTML="";
//判断查询是否成功
if(!response.succeed)
{
//查询失败
container.innerHTML+="<p>查询失败</p>";
container.innerHTML+="<p>错误码:"+response.error.code+"</p><p>错误原因:"+response.error.errorMsg+"</p>";
}else
{
//查询成功
container.innerHTML+="<p>查询成功</p>";
container.innerHTML+="<p>查询结果(queryResult)资源的 URI 为:"+response.newResourceLocation+"</p>";
}
}
其中,linkItems 用于指定关联外部表的参数,详见LinkItem,其他参数可参考SQL 查询。
执行查询,得到 URI 地址类似 http://localhost:8090/iserver/services/map-world/rest/maps/World Map/queryResults/3jx2ilcv_c81111e25a7f404ea36b2c8690756453.rjson 的 queryResult 资源,该 queryResult 资源包含了符合条件的记录的相关信息。
queryResult 资源的进一步解析请参见 queryResult 的解析。