类 JoinItem
- java.lang.Object
-
- com.supermap.data.InternalHandle
-
- com.supermap.data.InternalHandleDisposable
-
- com.supermap.data.JoinItem
-
- 所有已实现的接口:
- IDisposable
public class JoinItem extends com.supermap.data.InternalHandleDisposable连接信息类。
连接信息类。用于矢量数据集与外部表的连接。外部表可以为另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的DBMS表,也可以是用户自建的业务表。需要注意的是,矢量数据集与外部表必须属于同一数据源。
当两个表格之间建立了连接,通过对主表进行操作,可以对外部表进行查询,制作专题图以及分析等。当两个表格之间是一对一或多对一的关系时,可以使用join连接。当为多对一的关系时,允许指定多个字段之间的关联。该类型的实例可被创建。
数据集表之间的联系的建立有两种方式,一种是连接(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 表。
- 示范代码:
- 以下代码示范如何构造一个连接信息类,并将其添加到连接信息集合中。
public void toStringTest() { // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象 // 从数据源里得到名为“World”和“Capital”的数据集,分别为 datasetVector 和 datasetVector1,两个数据集都有 capital 字段 // 设置连接信息类,返回用于连接的表名 DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World"); DatasetVector datasetVector1 = (DatasetVector) datasource.getDatasets().get("Capital"); JoinItem joinitem = new JoinItem(); String foreignTableName = datasetVector1.getTableName(); // 设置连接信息类 joinitem.setForeignTable(foreignTableName); joinitem.setJoinFilter("World.capital=" + foreignTableName + ".capital"); joinitem.setJoinType(JoinType.LEFTJOIN); joinitem.setName("Connect"); System.out.println("连接信息为:" + joinitem.toString()); // 设置连接信息集合类,将连接信息加入到连接信息集合中 JoinItems joinitems = new JoinItems(); joinitems.add(joinitem); }
-
-
构造器概要
构造器 构造器和说明 JoinItem()构造一个新的 JoinItem 对象。
-
方法概要
所有方法 实例方法 具体方法 限定符和类型 方法和说明 voiddispose()释放该对象所占用的资源。StringgetForeignTable()返回外部表的名称。StringgetJoinFilter()返回与外部表之间的连接表达式,即设定两个表之间关联的字段。JoinTypegetJoinType()返回两个表之间连接的类型。StringgetName()返回此连接信息对象的名称。voidsetForeignTable(String value)设置外部表的名称。voidsetJoinFilter(String value)设置与外部表之间的连接表达式,即设定两个表之间关联的字段。voidsetJoinType(JoinType value)设置两个表之间连接的类型。voidsetName(String value)设置此连接信息对象的名称。StringtoString()将此连接信息对象输出为格式化字符串。
-
-
-
方法详细资料
-
getForeignTable
public String getForeignTable()
返回外部表的名称。- 返回:
- 外部表的名称。
- 默认值:
- 默认值为一个空字符串。
-
setForeignTable
public void setForeignTable(String value)
设置外部表的名称。- 参数:
value- 外部表的名称。- 示范代码:
- 请参见
JoinItem类的示例。
-
getJoinFilter
public String getJoinFilter()
返回与外部表之间的连接表达式,即设定两个表之间关联的字段。例如,将一个房屋的面数据集(Building)的 district 字段与一个房屋拥有者的纯属性数据集(Owner)的 region 字段相连接,两个数据集对应的表名称分别为 Table_Building 和 Table_Owner,则连接表达式为 Table_Building.district = Table_Owner.region,当有多个字段相连接时,用 AND 将多个表达式相连。- 返回:
- 两个表之间关联的字段。
- 默认值:
- 默认值为一个空字符串。
-
setJoinFilter
public void setJoinFilter(String value)
设置与外部表之间的连接表达式,即设定两个表之间关联的字段。例如,将一个房屋的面数据集(Building)的 district 字段与一个房屋拥有者的纯属性数据集(Owner)的 region 字段相连接,两个数据集对应的表名称分别为 Table_Building 和 Table_Owner,则连接表达式为 Table_Building.district = Table_Owner.region,当有多个字段相连接时,用 AND 将多个表达式相连。- 参数:
value- 两个表之间关联的字段。- 示范代码:
- 请参见
JoinItem类的示例。
-
getJoinType
public JoinType getJoinType()
返回两个表之间连接的类型。连接类型用于对两个连接的表进行查询时,决定了返回的记录的情况。UDB引擎不支持内连接。- 返回:
- 两个表之间连接的类型。
- 默认值:
- 默认值为
LEFTJOIN
-
setJoinType
public void setJoinType(JoinType value)
设置两个表之间连接的类型。连接类型用于对两个连接的表进行查询时,决定了返回的记录的情况。- 参数:
value- 两个表之间连接的类型。- 示范代码:
- 请参见
JoinItem类的示例。
-
getName
public String getName()
返回此连接信息对象的名称。- 返回:
- 连接信息对象的名称。
- 默认值:
- 默认值为 "UntitledJoinItem”。
-
setName
public void setName(String value)
设置此连接信息对象的名称。- 参数:
value- 连接信息对象的名称。- 示范代码:
- 请参见
JoinItem类的示例。
-
dispose
public void dispose()
释放该对象所占用的资源。当调用该方法之后,此对象不再可用。
-
-
Copyright © 2021–2025 SuperMap. All rights reserved.