| 包 | com.supermap.web.iServerJava6R.queryServices |
| 类 | public class LinkItem |
| 继承 | LinkItem Object |
用于矢量数据集与外部表的关联。外部表是另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 DBMS 表。需要注意的是,矢量数据集与外部表可以属于不同的数据源,但必须是 Oracle 或 SQL 数据库型数据源,不支持文件型 SDB、UDB 等文件型数据源。
表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接的相关设置是通过JoinItem类实现的,关联的相关设置是通过 LinkItem 类实现的,另外,用于建立连接(JoinItem)的两个表必须在同一个数据源下,而用于建立关联关系(LinkItem)的两个表可以不在同一个数据源下。
注意:使用外关联表制作专题图时,所关联的字段必须设置表名,例如,如果所关联的字段为BaseMap_R数据集的SmID,就要写成BaseMap_R.SMID。
下面通过查询的例子来说明连接和关联的区别,假设用来进行查询的表(即主空间数据集中的表),为TableA,被关联或者连接的表为TableB,现通过建立TableA 与TableB的连接或关联关系来查询TableA中满足查询条件的记录:
1.连接(join)
设置将TableB连接到TableA的连接信息,即建立 JoinItem 类并设置其属性,当执行TableA的查询操作时,系统将根据连接条件及查询条件,将满足条件的TableA中的内容与满足条件的TableB中的内容构成一个查询结果表,并将这个查询表保存在内存中,需要获取结果时,再从内存中取出相应的内容。
2.关联(link)
设置将TableB关联到TableA的关联信息,即建立 LinkItem 类并设置其属性,TableA 与 TableB 是通过主表(TableA)的外键(LinkItem类的 ForeignKey 属性) 和副表(TableB)的主键(LinkItem 类的 PrimaryKey 属性)实现关联的,当执行TableA的查询操作时,系统将根据关联信息中的过滤条件及查询条件, 分别查询TableA 与TableB中满足条件的内容,TableA的查询结果与TableB的查询结果分别作为独立的两个结果表保存在内存中,当需要获取结果时,SuperMap将对两个结果进行拼接并返回,因此,进行关联查询时,查询参数中的返回字段一定要有主表的外键,否则无法根据外键的值获取副表中的关联字段值,副表中的字段值将返回 null。在应用层看来,连接和关联操作很相似。
3.LinkItem 只支持左连接,不支持 SDB、UDB 等文件型数据源,只支持 Oracle 和 SQL 数据库型数据源。
4.JoinItem目前支持左连接和内连接,不支持全连接和右连接;
5.使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。主空间数据集:用来与外部表进行关联的数据集。外部属性表:用户通过 Oracle 或者 SQL Server 创建的数据表,或者是另一个矢量数据集所对应的 DBMS 表。
| 属性 | 定义方 | ||
|---|---|---|---|
| datasourceConnectionInfo : DatasourceConnectionInfo
获取或设置关联的外部数据源信息 DatasourceConnectionInfo 。
|
LinkItem | ||
| foreignKeys : Array
获取或设置主空间数据集的外键。
|
LinkItem | ||
| foreignTable : String
获取或设置关联的外部属性表的名称。
|
LinkItem | ||
| linkFields : Array
获取或设置欲保留的外部属性表的字段。
|
LinkItem | ||
| linkFilter : String
获取或设置与外部属性表的连接条件。
|
LinkItem | ||
| name : String
获取或设置此关联信息对象的名称。
|
LinkItem | ||
| primaryKeys : Array
获取或设置需要关联的外部属性表的主键。
|
LinkItem | ||
| 方法 | 定义方 | ||
|---|---|---|---|
|
LinkItem()
初始化 LinkItem 类的新实例。
|
LinkItem | ||
| datasourceConnectionInfo | 属性 |
datasourceConnectionInfo:DatasourceConnectionInfo
获取或设置关联的外部数据源信息 DatasourceConnectionInfo 。
public function get datasourceConnectionInfo():DatasourceConnectionInfo public function set datasourceConnectionInfo(value:DatasourceConnectionInfo):void| foreignKeys | 属性 |
foreignKeys:Array
获取或设置主空间数据集的外键。
public function get foreignKeys():Array public function set foreignKeys(value:Array):void| foreignTable | 属性 |
foreignTable:String
获取或设置关联的外部属性表的名称。
public function get foreignTable():String public function set foreignTable(value:String):void| linkFields | 属性 |
linkFields:Array
获取或设置欲保留的外部属性表的字段。
public function get linkFields():Array public function set linkFields(value:Array):void| linkFilter | 属性 |
linkFilter:String
获取或设置与外部属性表的连接条件。
public function get linkFilter():String public function set linkFilter(value:String):void| name | 属性 |
name:String
获取或设置此关联信息对象的名称。
public function get name():String public function set name(value:String):void| primaryKeys | 属性 |
primaryKeys:Array
获取或设置需要关联的外部属性表的主键。
public function get primaryKeys():Array public function set primaryKeys(value:Array):void| LinkItem | () | 构造函数 |
public function LinkItem()
初始化 LinkItem 类的新实例。
//定义数据库信息
var dataSrcConnecInfo:DatasourceConnectionInfo = new DatasourceConnectionInfo();
dataSrcConnecInfo.server = "192.168.177.11";
dataSrcConnecInfo.dataBase = "RelQuery";
dataSrcConnecInfo.connect = true;
dataSrcConnecInfo.engineType = EngineType.SQL_PLUS;
dataSrcConnecInfo.user = "supermap";
dataSrcConnecInfo.password = "map";
dataSrcConnecInfo.alias = "RelQuery";//数据库别名
dataSrcConnecInfo.driver = "SQL Server";
dataSrcConnecInfo.readOnly = false;
dataSrcConnecInfo.exclusive = false;
//定义关联信息
var linkItem:LinkItem = new LinkItem();
linkItem.datasourceConnectionInfo = dataSrcConnecInfo;
linkItem.foreignKeys = new Array("ZIPL");//主表的外键
linkItem.foreignTable = "customerA";//外表
linkItem.linkFields = new Array( "SMID as customerAID","ZIP");//外表要保留的字段
linkItem.name = "关联";
linkItem.primaryKeys = new Array("ZIP");//外表的主键
var filterParam:FilterParameter = new FilterParameter();
filterParam.name = "streetL@RelQuery"; //主表
filterParam.fields = new Array("SmID","ZIPL");//主表要保留的字段
filterParam.linkItems = new Array(linkItem);