com.supermap.data

类 QueryParameter

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.data.InternalHandleDisposable
        • com.supermap.data.QueryParameter
  • 所有已实现的接口:
    IDisposable


    public class QueryParameter
    extends com.supermap.data.InternalHandleDisposable
    查询参数类。

    用于描述一个条件查询的限制条件,如所包含的 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

        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 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(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 - 指定查询结果是否包含几何对象字段。
      • getResolution

        public double getResolution()
        获取查询分辨率。
        返回:
        查询分辨率。
      • setResolution

        public void setResolution(double resolution)
        设置查询分辨率。
        参数:
        resolution - 查询分辨率。
        抛出:
        IllegalStateException - 当前查询条件对象已经被释放
      • getSpatialQueryObject

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

        注意:

        • 若搜索对象是数据集或是记录集类型,则必须同被搜索图层对应的数据集的地理坐标系一致。
        • 当搜索数据集/记录集中存在对象重叠的情况时,空间查询的结果可能不正确,建议采用遍历搜索数据集/记录集,逐个使用单对象查询的方式进行空间查询。
        返回:
        空间查询中的搜索对象。
        默认值:
        默认值为 null。
      • setSpatialQueryObject

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

        注意:

        • 若搜索对象是数据集或是记录集类型,则必须同被搜索图层对应的数据集的地理坐标系一致。
        • 当搜索数据集/记录集中存在对象重叠的情况时,空间查询的结果可能不正确,建议采用遍历搜索数据集/记录集,逐个使用单对象查询的方式进行空间查询。
        参数:
        value - 空间查询中的搜索对象。
      • getSpatialQueryMode

        public SpatialQueryMode getSpatialQueryMode()
        返回空间查询操作模式。
        返回:
        空间查询操作模式。
        默认值:
        默认值为 NONE 模式。
      • setSpatialQueryMode

        public void setSpatialQueryMode(SpatialQueryMode value)
        设置空间查询操作模式。
        参数:
        value - 空间查询操作模式。
      • getOrderBy

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

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

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

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

        public void setOrderBy(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 String[] getGroupBy()
        返回 SQL 查询分组条件的字段。对于 SQL 查询得到的记录集中的各字段,可以根据指定的字段进行分组,指定的字段值相同的记录将被放置在一起。
        返回:
        SQL 查询分组条件的字段。
        默认值:
        默认值为个数为0的字符串数组。
      • setGroupBy

        public void setGroupBy(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);
                }
         
      • getLimit

        public int[] getLimit()
        获取查询限制条数。
        返回:
        查询限制条数数组。
        抛出:
        IllegalStateException - 当前查询条件对象已被释放。
      • setLimit

        public void setLimit(int[] limit)
        设置查询限制条数。
        参数:
        limit - 查询限制条数数组。
        抛出:
        IllegalStateException - 当前查询条件对象被释放。
      • getResultFields

        public String[] getResultFields()
        返回查询结果字段集合。对于查询结果的记录集中,可以设置其中所包含的字段,如果为空,则查询所有字段。
        返回:
        查询结果字段集合。
        默认值:
        默认值为个数为0的字符串数组。
      • setResultFields

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

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

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

        public String toString()
        将此查询参数对象包含的查询参数输出为一个字符串。
        覆盖:
        toString 在类中 Object
        返回:
        查询参数信息的 XML 字符串。
      • dispose

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

        public String getQueryVersionName()
        获取当前查询操作所在版本的名称。
        返回:
        版本名称
      • setQueryVersionName

        public void setQueryVersionName(String strVersionName)
        设置查询的版本,查询结果将以此版本下的数据状态为准。
        参数:
        strVersionName - 版本名称,默认是 default 版本
      • getQueryHistoricalMomentName

        public String getQueryHistoricalMomentName()
        获取当前查询操作所在的历史时刻的版本名称。
        返回:
        历史时刻的版本名称
      • setQueryHistoricalMomentName

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

Copyright © 2021–2024 SuperMap. All rights reserved.