com.supermap.data
类 LinkItem

java.lang.Object
  继承者 com.supermap.data.LinkItem

public class LinkItem
extends java.lang.Object

关联信息类,仅支持关联 Oracle数据库。

用于矢量数据集与其它数据集的关联。关联数据集可以为另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 DBMS 表,用户自建业务表需要外挂到 SuperMap 数据源中。需要注意的是,矢量数据集与关联数据集可以属于不同的数据源。

数据集表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接的相关设置是通过 JoinItem 类实现的,关联的相关设置是通过 LinkItem 类实现的,另外,用于建立连接的两个数据集表必须在同一个数据源下,而用于建立关联关系的两个数据集表可以不在同一个数据源下。

下面通过查询的例子来说明连接和关联的区别,假设用来进行查询的数据集表为 DatasetTableA,被关联或者连接的表为 DatasetTableB,现通过建立 DatasetTableA 与 DatasetTableB 的连接或关联关系来查询 DatasetTableA 中满足查询条件的记录:

1.连接(join)

设置将 DatasetTableB 连接 DatasetTableA 的连接信息,即建立 JoinItem 类并设置其属性,当执行 DatasetTableA 的查询操作时,系统将根据连接条件及查询条件,将满足条件的 DatasetTableA 中的内容与满足条件的 DatasetTableB 中的内容构成一个查询结果表,并且这个查询表保存在内存中,需要返回结果时,再从内存中取出相应的内容。

2.关联(link)

设置将 DatasetTableB (副表)关联到 DatasetTableA (主表)的关联信息,即建立 LinkItem 类并设置其属性,DatasetTableA 与 DatasetTableB 是通过主表 DatasetTableA 的外键(LinkItem.getForeignKeys() 方法)和副表 DatasetTableB 的主键(LinkItem.getPrimaryKeys() 方法)实现关联的,当执行 DatasetTableA 的查询操作时,系统将根据关联信息中的过滤条件及查询条件,分别查询 DatasetTableA 与 DatasetTableB 中满足条件的内容,DatasetTableA 的查询结果与 DatasetTableB 的查询结果分别作为独立的两个结果表保存在内存中,当需要返回结果时,SuperMap 将对两个结果进行拼接并返回,因此,在应用层看来,连接和关联操作很相似。

3.LinkItem 只支持左连接,UDB、PostgreSQL 和 DB2 数据源不支持 LinkItem,即对 UDB、PostgreSQL 和 DB2 类型的数据引擎设置 LinkItem 不起作用;

4.JoinItem 目前支持左连接和内连接,不支持全连接和右连接,UDB 引擎不支持内连接;

5.使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。主空间数据集:用来与外部表进行关联的数据集。外部属性表:用户通过 Oracle 或者 SQL Server 创建的数据表,或者是另一个矢量数据集所对应的 DBMS 表。

注意:使用外关联表制作专题图时,所关联的字段必须设置表名,例如,如果所关联的字段为BaseMap_R数据集的SmID,就要写成BaseMap_R.SMID。

示例:
以下代码示范如何构造一个关联信息类,并将其添加到关联信息集合中。
 public void LinkItemTest() {
                // 假设已经构造了一个数据源连接信息对象 info;主空间数据集中的外键字段为 LinkID;关联数据集名为 LinkDataset,对应的数据库表名为 LinkTable;该表中有字段 population,主键为 ID。
                // 构造一个 LinkItem 对象,并对其进行相应设置
        LinkItem linkItem = new LinkItem();
        linkItem.setConnectionInfo(info);
        linkItem.setForeignKeys(new String[] {"LinkID"});//主数据集的外键
        linkItem.setPrimaryKeys(new String[] {"ID"});//关联数据集的主键
        linkItem.setForeignTable("LinkDataset");//关联数据集
        linkItem.setLinkFields(new String[] {"LinkTable.population"});//关联数据集的字段
        linkItem.setLinkFilter("ID < 100");//关联数据集的过滤条件
        linkItem.setName("关联");

        System.out.println("关联信息为:" + linkItem.toString());

        // 构造一个 LinkItems 对象并将 linkItem 添加到其中
        LinkItems linkItems = new LinkItems();
        linkItems.add(linkItem);
 }
 

构造方法摘要
LinkItem()
          构造一个新的 LinkItem 对象。
 
方法摘要
 void dispose()
          释放对象所占用的资源。
 DatasourceConnectionInfo getConnectionInfo()
          返回关联的外部数据源。
 java.lang.String[] getForeignKeys()
          返回主空间数据集的外键。
 java.lang.String getForeignTable()
          返回关联的数据集(可以为纯属性数据集)的名称。
 java.lang.String[] getLinkFields()
          当两个数据集通过主、外键建立关联后,返回欲查询的所关联数据集的字段。
 java.lang.String getLinkFilter()
          返回与所关联数据集的过滤条件。
 java.lang.String getName()
          返回此关联信息对象的名称。
 java.lang.String[] getPrimaryKeys()
          返回需要关联的数据集的主键。
 void setConnectionInfo(DatasourceConnectionInfo value)
          设置关联的外部数据源。
 void setForeignKeys(java.lang.String[] value)
          设置主空间数据集的外键。
 void setForeignTable(java.lang.String value)
          设置关联的数据集(可以为纯属性数据集)的名称。
 void setLinkFields(java.lang.String[] value)
          当两个数据集通过主、外键建立关联后,设置欲查询的所关联数据集的字段。
 void setLinkFilter(java.lang.String value)
          设置与所关联数据集的过滤条件。
 void setName(java.lang.String value)
          设置此关联信息对象的名称。
 void setPrimaryKeys(java.lang.String[] value)
          设置需要关联的数据集的主键。
 java.lang.String toString()
          将此关联信息对象输出为一个字符串,其格式为{Name=””,ForeignTable=””,ConnectionInfo={},LinkFilter=””,LinkFields=””,PrimaryKeys={},ForeignKeys={}}。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

LinkItem

public LinkItem()
构造一个新的 LinkItem 对象。

方法详细信息

getName

public java.lang.String getName()
返回此关联信息对象的名称。

返回:
关联信息对象的名称。
默认值:
默认值为 "UntitledLinkItem"。

setName

public void setName(java.lang.String value)
设置此关联信息对象的名称。

参数:
value - 关联信息对象的名称。
示例:
请参见 LinkItem 类的示例。

getForeignTable

public java.lang.String getForeignTable()
返回关联的数据集(可以为纯属性数据集)的名称。

现只支持关联 SuperMap 数据源中的数据集。

返回:
关联的数据集(可以为纯属性数据集)的名称。
默认值:
默认值为一个空字符串。

setForeignTable

public void setForeignTable(java.lang.String value)
设置关联的数据集(可以为纯属性数据集)的名称。

现只支持关联 SuperMap 数据源中的数据集。

参数:
value - 关联的数据集(可以为纯属性数据集)的名称。
示例:
请参见 LinkItem 类的示例。

getConnectionInfo

public DatasourceConnectionInfo getConnectionInfo()
返回关联的外部数据源。

返回:
关联的外部数据源。
默认值:
默认值为 {Alias="",EngineType=UDB,Server="",Database="",Driver="",User="",Password="",IsReadOnly=False,IsAutoConnect=True,MaxConnection=1,MinConnection=1,ConncetionIncrement=0}

setConnectionInfo

public void setConnectionInfo(DatasourceConnectionInfo value)
设置关联的外部数据源。

参数:
value - 关联的外部数据源。
示例:
请参见 LinkItem 类的示例。

getLinkFilter

public java.lang.String getLinkFilter()
返回与所关联数据集的过滤条件。

返回:
与所关联数据集的过滤条件。
默认值:
默认值为一个空字符串。

setLinkFilter

public void setLinkFilter(java.lang.String value)
设置与所关联数据集的过滤条件。

参数:
value - 与所关联数据集的过滤条件。
示例:
请参见 LinkItem 类的示例。

getLinkFields

public java.lang.String[] getLinkFields()
当两个数据集通过主、外键建立关联后,返回欲查询的所关联数据集的字段。

返回:
欲查询的所关联数据集的字段。
默认值:
默认值为一个空字符串。

setLinkFields

public void setLinkFields(java.lang.String[] value)
当两个数据集通过主、外键建立关联后,设置欲查询的所关联数据集的字段。

参数:
value - 欲查询的所关联数据集的字段。
示例:
请参见 LinkItem 类的示例。

getPrimaryKeys

public java.lang.String[] getPrimaryKeys()
返回需要关联的数据集的主键。

返回:
需要关联的数据集的主键。
默认值:
默认值为一个空字符串。

setPrimaryKeys

public void setPrimaryKeys(java.lang.String[] value)
设置需要关联的数据集的主键。

参数:
value - 需要关联的数据集的主键。
示例:
请参见 LinkItem 类的示例。

getForeignKeys

public java.lang.String[] getForeignKeys()
返回主空间数据集的外键。

返回:
主空间数据集的外键。
默认值:
默认值为一个空字符串。

setForeignKeys

public void setForeignKeys(java.lang.String[] value)
设置主空间数据集的外键。

参数:
value - 主空间数据集的外键。
示例:
请参见 LinkItem 类的示例。

dispose

public void dispose()
释放对象所占用的资源。调用该方法之后,此对象不再可用。


toString

public java.lang.String toString()
将此关联信息对象输出为一个字符串,其格式为{Name=””,ForeignTable=””,ConnectionInfo={},LinkFilter=””,LinkFields=””,PrimaryKeys={},ForeignKeys={}}。

覆盖:
java.lang.Object 中的 toString
返回:
表示关联信息对象的字符串。