包 | com.supermap.web.iServerJava6R.queryServices |
类 | public class LinkItem |
继承 | LinkItem ![]() |
用于矢量数据集与外部表的关联。外部表是另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 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);