com.supermap.data
类 QueryParameter

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

public class QueryParameter
extends java.lang.Object

查询参数类。

用于描述一个条件查询的限制条件,如所包含的 SQL 语句,游标方式,空间数据的位置关系条件设定等。

条件查询,是查询满足一定条件的所有要素的记录,其查询得到的结果是记录集。查询参数类是用来设置条件查询的查询条件从而得到记录集。条件查询包括两种最主要的查询方式,一种为 SQL 查询,又称属性查询,即通过构建包含属性字段、运算符号和数值的 SQL 条件语句来选择记录,从而得到记录集;另一种为空间查询,即根据要素间地理或空间的关系来查询记录来得到记录集。

该类中 getAttributeFilter() (setAttributeFilter()),getOrderBy() (setOrderBy()) 以及 getGroupBy() (setGroupBy()) 方法是用来返回和设置属性查询的相关信息的;而 getSpatialQueryObject() (setSpatialQueryObject()) 以及 getSpatialQueryMode (setSpatialQueryMode) 方法用来返回和设置空间查询的相关信息。另外,通过 getJoinItems() (setJoinItems()) 和 getLinkItems() (setLinkItems) 方法可以设置和返回与外部表的连接或关联,从而对外部表进行查询。

如果进行关联查询,必须将该类对象的游标设置为静态游标,具体使用方法请参见 setLinkItems() 方法的示例。

示例:
以下代码示范如何进行查询操作,并把查询结果追加到新建的数据集中。假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象,此数据源中包含一个名为 World 的矢量数据集 dataset_world,取出该数据集。
 public void queryParameterTest(DatasetVector dataset_world)
 {
        // 返回空间查询中的搜索对象
        Recordset srcRecordset = dataset_world.query("SmID=100",CursorType.STATIC);

        // 设置查询参数
        QueryParameter parameter = new QueryParameter();
        parameter.setAttributeFilter("SmID<100");
        parameter.setCursorType(CursorType.STATIC);
        parameter.setSpatialQueryMode(SpatialQueryMode.DISJOINT);
        parameter.setSpatialQueryObject(srcRecordset);

        // 进行查询
        Recordset recordset = dataset_world.query(parameter);

        // 以 dataset_world 为模板创建数据集
        DatasetVector dataset_result = (DatasetVector) datasets.createFromTemplate(datasets.getAvailableDatasetName("Results"), dataset_world);

        // 将空间查询结果追加到新建的数据集中
        dataset_result.append(recordset);

        // 依次关闭所有对象
        srcRecordset.close();
        dataset_result.close();
        dataset_world.close();
        recordset.dispose();
    }
 

构造方法摘要
QueryParameter()
          构造一个新的 QueryParameter 对象。
QueryParameter(QueryParameter queryParameter)
          根据给定的 QueryParameter 对象构造一个与其完全相同的新对象。
 
方法摘要
 void AddTimeCondition(TimeCondition timecondition)
          增加一个单时间字段时空模型查询条件。
 void dispose()
          释放该对象所占用的资源。
 java.lang.String getAttributeFilter()
          返回查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。
 CursorType getCursorType()
          返回查询所采用的游标类型。
 java.lang.String[] getGroupBy()
          返回 SQL 查询分组条件的字段。
 boolean getHasGeometry()
          返回查询结果是否包含几何对象字段。
 JoinItems getJoinItems()
          返回与外部表的连接信息。
 LinkItems getLinkItems()
          返回与外部表的关联信息。
 java.lang.String[] getOrderBy()
          返回SQL查询排序的字段。
 java.lang.String getQueryHistoricalMomentName()
          获取当前查询操作所在的历史时刻的版本名称。
 QueryMode getQueryMode()
          返回查询类型,SuperMap 支持一般查询、模糊查询和窗口查询。
 java.lang.String getQueryVersionName()
          获取当前查询操作所在版本的名称。
 java.lang.String[] getResultFields()
          返回查询结果字段集合。
 SpatialQueryMode getSpatialQueryMode()
          返回空间查询操作模式。
 java.lang.Object getSpatialQueryObject()
          返回空间查询中的搜索对象。
 TimeCondition[] getTimeConditions()
          获取单时间字段时空模型查询条件。
 void setAttributeFilter(java.lang.String value)
          设置查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。
 void setCursorType(CursorType value)
          设置查询所采用的游标类型。
 void setGroupBy(java.lang.String[] value)
          设置 SQL 查询分组条件的字段。
 void setHasGeometry(boolean value)
          设置查询结果是否包含几何对象字段。
 void setJoinItems(JoinItems joinItems)
          设置与外部表的连接信息。
 void setLinkItems(LinkItems linkItems)
          设置与外部表的关联信息。
 void setOrderBy(java.lang.String[] value)
          设置 SQL 查询排序的字段。
 void setQueryHistoricalMomentName(java.lang.String strHisVersionName)
          设置查询的历史时刻的版本名称,查询结果将以此版本下的数据状态为准。
 void setQueryMode(QueryMode value)
          设置查询类型,SuperMap 支持一般查询、模糊查询和窗口查询三种查询类型。
 void setQueryVersionName(java.lang.String strVersionName)
          设置查询的版本,查询结果将以此版本下的数据状态为准。
 void setResultFields(java.lang.String[] value)
          设置查询结果字段集合。
 void setSpatialQueryMode(SpatialQueryMode value)
          设置空间查询操作模式。
 void setSpatialQueryObject(java.lang.Object value)
          设置空间查询中的搜索对象。
 void setTimeConditions(TimeCondition[] conditions)
          设置单时间字段时空模型查询条件。
 java.lang.String toString()
          将此查询参数对象包含的查询参数输出为一个字符串。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

QueryParameter

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


QueryParameter

public QueryParameter(QueryParameter queryParameter)
根据给定的 QueryParameter 对象构造一个与其完全相同的新对象。

参数:
queryParameter - 指定的 QueryParameter 对象。
方法详细信息

getCursorType

public CursorType getCursorType()
返回查询所采用的游标类型。SuperMap 支持两种类型的游标,分别为动态游标和静态游标。使用动态游标查询时,记录集会动态的刷新,耗费很多的资源,而当使用静态游标时,查询的为记录集的静态副本,效率较高。推荐在查询时使用静态游标,使用静态游标获得的记录集是不可编辑的。详细信息请参见 CursorType 类型。 to_date()

返回:
查询所采用的游标类型。
另请参见:
CursorType
默认值:
默认值为 DYNAMIC 类型。

setCursorType

public void setCursorType(CursorType value)
设置查询所采用的游标类型。SuperMap 支持两种类型的游标,分别为动态游标和静态游标。使用动态游标查询时,记录集会动态的刷新,耗费很多的资源,而当使用静态游标时,查询的为记录集的静态副本,效率较高。推荐在查询时使用静态游标,使用静态游标获得的记录集是不可编辑的。详细信息请参见 CursorType 类型。

进行关联查询,必须设置游标为静态游标。

参数:
value - 指定查询所采用的游标类型。
另请参见:
CursorType
示例:
请参见 setLinkItems() 方法的示例。

getQueryMode

public QueryMode getQueryMode()
返回查询类型,SuperMap 支持一般查询、模糊查询和窗口查询。

返回:
查询模式。
另请参见:
QueryMode

setQueryMode

public void setQueryMode(QueryMode value)
设置查询类型,SuperMap 支持一般查询、模糊查询和窗口查询三种查询类型。

参数:
value - 指定查询类型。
另请参见:
QueryMode

getAttributeFilter

public java.lang.String getAttributeFilter()
返回查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。SQL 查询又称为属性查询,是通过一个或多个 SQL 条件语句来查询记录。SQL 语句是包含属性字段、运算符号和数值的条件语句。例如,你希望查询一个商业区内去年的年销售额超过30万的服装店,则构建的 SQL 查询语句为:Sales > 30,0000 AND SellingType = ‘Garment’。

对于不同引擎的数据源,不同函数的适用情况及函数用法有所不同:

1.对于数据库型数据源(Oracle Plus、SQL Server Plus、PostgreSQL 和 DB2 数据源),函数的用法请参见数据库相关文档。

2.对于文件型数据源(UDB 数据源),可参见SQL查询技术文档

返回:
查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。
默认值:
默认值为一个空字符串。

setAttributeFilter

public void setAttributeFilter(java.lang.String value)
设置查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。SQL 查询又称为属性查询,是通过一个或多个 SQL 条件语句来查询记录。SQL 语句是包含属性字段、运算符号和数值的条件语句。例如,你希望查询一个商业区内去年的年销售额超过30万的服装店,则构建的 SQL 查询语句为:Sales > 30,0000 AND SellingType = ‘Garment’。

对于不同引擎的数据源,不同函数的适用情况及函数用法有所不同:

1.对于数据库型数据源(Oracle Plus、SQL Server Plus、PostgreSQL 和 DB2 数据源),函数的用法请参见数据库相关文档。

2.对于文件型数据源(UDB 数据源),可参见SQL查询技术文档

参数:
value - 查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句以字符串的形式作为参数整体传入。
示例:
以下代码示范如何在 UDB 数据源中对日期字段条件进行 SQL 查询。
 public void TestSQLQuery() {
        // 假设打开一个工作空间 workspace 对象,工作空间中存在一个 UDB 数据源 datasource 对象
        // 数据源中包含一个名为 "Countries" 的矢量数据集 datasetVector,包含日期类型的字段"date"
        Datasets datasets = datasource.getDatasets();
        DatasetVector  datasetVector = (DatasetVector) datasets.get("Countries");

        // 构造一个查询参数对象,查询Countries数据集中 date 字段为"1984-08-10"的记录。
        QueryParameter queryParameter = new QueryParameter();
        queryParameter.setAttributeFilter("date = to_date(1984-08-10 00:00:00)");
        queryParameter.setCursorType(CursorType.DYNAMIC);

        // 进行排序查询,将结果存储在 recordset 对象中
        Recordset recordset = datasetVector.query(queryParameter);

        // 以 datasetVector 为模板创建数据集
        DatasetVector dataset_result = (DatasetVector) datasets.createFromTemplate(datasets.getAvailableDatasetName("Results"), datasetVector);

        // 将查询结果追加到新建的数据集中
        dataset_result.append(recordset);

        // 依次关闭所有对象
        recordset.close();
        dataset_result.close();
        datasetVector.close();
        recordset.dispose();
      }
 

getTimeConditions

public TimeCondition[] getTimeConditions()
获取单时间字段时空模型查询条件。

返回:
时间查询条件数组。

setTimeConditions

public void setTimeConditions(TimeCondition[] conditions)
设置单时间字段时空模型查询条件。

参数:
conditions - 时间查询条件数组。

AddTimeCondition

public void AddTimeCondition(TimeCondition timecondition)
增加一个单时间字段时空模型查询条件。

参数:
timecondition - 时间查询条件。

getHasGeometry

public boolean getHasGeometry()
返回查询结果是否包含几何对象字段。
  1. 若查询时不取空间数据,即只查询属性信息,则在返回的 Recordset 中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用 Recordset.getGeometry() 将返回空。
  2. 如果 getHasGeometry() 方法返回值为 true,则 getResultFields() 方法将返回所有字段。

返回:
查询结果包含几何对象字段,返回 true,不包含几何对象字段返回 false。
默认值:
默认值为 true。

setHasGeometry

public void setHasGeometry(boolean value)
设置查询结果是否包含几何对象字段。
  1. 若查询时不取空间数据,即只查询属性信息,则在返回的 Recordset 中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用 Recordset.getGeometry()将返回空。
  2. 如果 getHasGeometry() 方法返回值为 true,则 getResultFields() 方法将返回所有字段。

参数:
value - 指定查询结果是否包含几何对象字段。

getSpatialQueryObject

public java.lang.Object getSpatialQueryObject()
返回空间查询中的搜索对象。可以是 Point2DRectangle2DGeoPointGeoLineGeoRegionDatasetVectorRecordset 等类型的对象。

注意:

返回:
空间查询中的搜索对象。
默认值:
默认值为 null。

setSpatialQueryObject

public void setSpatialQueryObject(java.lang.Object value)
设置空间查询中的搜索对象。可以是 Point2DRectangle2DGeoPointGeoLineGeoLineMGeoRegionGeoTextDatasetVectorRecordset 等类型的对象。

注意:

参数:
value - 空间查询中的搜索对象。

getSpatialQueryMode

public SpatialQueryMode getSpatialQueryMode()
返回空间查询操作模式。

返回:
空间查询操作模式。
默认值:
默认值为 NONE 模式。

setSpatialQueryMode

public void setSpatialQueryMode(SpatialQueryMode value)
设置空间查询操作模式。

参数:
value - 空间查询操作模式。

getOrderBy

public java.lang.String[] getOrderBy()
返回SQL查询排序的字段。

对于 SQL 查询得到的记录集中的各记录,可以根据指定的字段进行排序,并可以指定为升序排列或是降序排列,其中 asc 表示升序,desc 表示降序。

注意用于排序的字段必须为数值型。

返回:
SQL 查询排序的字段。
默认值:
默认值为个数为0的字符串数组。

setOrderBy

public void setOrderBy(java.lang.String[] value)
设置 SQL 查询排序的字段。

对于 SQL 查询得到的记录集中的各记录,可以根据指定的字段进行排序,并可以指定为升序排列或是降序排列,其中 asc 表示升序,desc 表示降序。

注意:用于排序的字段必须为数值型。

参数:
value - SQL 查询排序的字段。
示例:
以下代码示范如何利用属性查询条件、游标类型进行属性排序查询。
 public void testOrderBy() {
        // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
        // 数据源中包含一个名为 "text" 的矢量数据集 datasetVector,对该数据集中的 "ord" 、“or1”字段分别进行升序、降序排序
        Datasets datasets = datasource.getDatasets();
        DatasetVector  datasetVector = (DatasetVector) datasets.get("text");

        // 构造一个查询参数对象,其中查询条件为按照“ord”字段升序,“or1”字段降序,游标类型为动态
        QueryParameter queryParameter = new QueryParameter();
        queryParameter.setOrderBy(new String[] { "ord asc", "or1 desc" });
        queryParameter.setCursorType(CursorType.DYNAMIC);

        // 进行排序查询,将结果存储在 recordset 对象中
        Recordset recordset = datasetVector.query(queryParameter);

        // 以 datasetVector 为模板创建数据集
        DatasetVector dataset_result = (DatasetVector) datasets.createFromTemplate(datasets.getAvailableDatasetName("Results"), datasetVector);

        // 将查询结果追加到新建的数据集中
        dataset_result.append(recordset);

        // 依次关闭所有对象
        recordset.close();
        dataset_result.close();
        datasetVector.close();
        recordset.dispose();
      }
 

getGroupBy

public java.lang.String[] getGroupBy()
返回 SQL 查询分组条件的字段。对于 SQL 查询得到的记录集中的各字段,可以根据指定的字段进行分组,指定的字段值相同的记录将被放置在一起。

返回:
SQL 查询分组条件的字段。
默认值:
默认值为个数为0的字符串数组。

setGroupBy

public void setGroupBy(java.lang.String[] value)
设置 SQL 查询分组条件的字段。对于 SQL 查询得到的记录集中的各字段,可以根据指定的字段进行分组,指定的字段值相同的记录将被放置在一起。

注意:

  1. 空间查询(query方法)不支持调用 setGroupBy 方法,否则可能导致空间查询的结果不正确。
  2. 只有 setCursorType(CursorType.STATIC) 时, setGroupBy() 方法才有效;
  3. setHasGeometry(false)setResultFields() 方法中的字段与本方法中的字段相同时,setGroupBy() 方法才有效。
  4. 查询中如果使用了 setGroupBy() 方法,在查询非几何对象字段(即 setHasGeometry(false))时,返回的记录集为只读。

参数:
value - SQL 查询分组条件的字段。

getJoinItems

public JoinItems getJoinItems()
返回与外部表的连接信息。当被查询的矢量数据集有相连接的外部表时,查询得到的结果中会包含相连接的外部表中满足条件的记录。

返回:
与外部表的连接信息。
默认值:
默认值为空的 JoinItems 对象。

setJoinItems

public void setJoinItems(JoinItems joinItems)
设置与外部表的连接信息。当被查询的矢量数据集有相连接的外部表时,查询得到的结果中会包含相连接的外部表中满足条件的记录。

参数:
joinItems - 指定与外部表的连接信息。

getLinkItems

public LinkItems getLinkItems()
返回与外部表的关联信息。当被查询的矢量数据集有相关联的外部表时,查询得到的结果中会包含相关联的外部表中满足条件的记录。仅支持外部连接Oracle数据库。

返回:
与外部表的关联信息。
默认值:
默认值为空的 LinkItems 对象。

setLinkItems

public void setLinkItems(LinkItems linkItems)
设置与外部表的关联信息。当被查询的矢量数据集有相关联的表时,查询得到的结果中会包含相关联的表中满足条件的记录。仅支持外部连接Oracle数据库。

参数:
linkItems - 与外部表的关联信息。
示例:
以下代码示范如何进行关联查询。
 public void testLinkQuery() {
            // 前提条件:已打开一个工作空间 workspace 对象,工作空间中存在一个Oracle数据源 datasource 对象,数据源中包含矢量数据集“World”和“Capital”,两个数据集都有 Country 字段。
            // 获取两个数据集
            Datasets datasets = datasource.getDatasets();
            DatasetVector datasetVector = (DatasetVector) datasets.get("World");
            DatasetVector datasetVector1 = (DatasetVector) datasets.get("Capital");
            DatasourceConnectionInfo datasourceConnectionInfo = datasource.getConnectionInfo();

            // 构造一个 LinkItem 对象,并对其进行相应设置
            LinkItem linkItem = new LinkItem();
            linkItem.setConnectionInfo(datasourceConnectionInfo);
                    linkItem.setForeignTable(datasetVector1.getTableName());
                    String[] keys = new String[] { "Country" };
                    linkItem.setForeignKeys(keys);
                    linkItem.setPrimaryKeys(keys);
                    String[] fields = new String[] { "SMID AS LSMID", "Country AS LCountry", "Capital AS LCapital","Cap_Pop AS LCap_Pop" };
                    linkItem.setLinkFields(fields);

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

                    // 构造一个 QueryParameter 对象,并对其进行相应设置
                    QueryParameter queryParameter = new QueryParameter();
                    queryParameter.setLinkItems(linkItems);
                    queryParameter.setCursorType(CursorType.STATIC);

                    // 进行关联查询,并将其结果存储在 recordset 对象中
                    Recordset recordset = datasetVector.query(queryParameter);
        }
 

getResultFields

public java.lang.String[] getResultFields()
返回查询结果字段集合。对于查询结果的记录集中,可以设置其中所包含的字段,如果为空,则查询所有字段。

返回:
查询结果字段集合。
默认值:
默认值为个数为0的字符串数组。

setResultFields

public void setResultFields(java.lang.String[] value)
设置查询结果字段集合。对于查询结果的记录集中,可以设置其中所包含的字段,如果为空,则查询所有字段。

注意:对 setResultField() 方法的设置,只有当 setHasGeometry(false)时才有效,否则返回全部的字段。

参数:
value - 查询结果字段集合。

toString

public java.lang.String toString()
将此查询参数对象包含的查询参数输出为一个字符串。

覆盖:
java.lang.Object 中的 toString
返回:
查询参数信息的 XML 字符串。

getQueryVersionName

public java.lang.String getQueryVersionName()
获取当前查询操作所在版本的名称。

返回:
版本名称

setQueryVersionName

public void setQueryVersionName(java.lang.String strVersionName)
设置查询的版本,查询结果将以此版本下的数据状态为准。

参数:
strVersionName - 版本名称,默认是 default 版本

getQueryHistoricalMomentName

public java.lang.String getQueryHistoricalMomentName()
获取当前查询操作所在的历史时刻的版本名称。

返回:
历史时刻的版本名称

setQueryHistoricalMomentName

public void setQueryHistoricalMomentName(java.lang.String strHisVersionName)
设置查询的历史时刻的版本名称,查询结果将以此版本下的数据状态为准。

参数:
strHisVersionName - 历史时刻的版本名称

dispose

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