类 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()
构造一个新的 QueryParameter 对象。QueryParameter(QueryParameter queryParameter)
根据给定的 QueryParameter 对象构造一个与其完全相同的新对象。
-
方法概要
所有方法 实例方法 具体方法 限定符和类型 方法和说明 void
AddTimeCondition(TimeCondition timecondition)
增加一个单时间字段时空模型查询条件。void
dispose()
释放该对象所占用的资源。String
getAttributeFilter()
返回查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。CursorType
getCursorType()
返回查询所采用的游标类型。String[]
getGroupBy()
返回 SQL 查询分组条件的字段。boolean
getHasGeometry()
返回查询结果是否包含几何对象字段。JoinItems
getJoinItems()
返回与外部表的连接信息。int[]
getLimit()
获取查询限制条数。LinkItems
getLinkItems()
返回与外部表的关联信息。String[]
getOrderBy()
返回SQL查询排序的字段。String
getQueryHistoricalMomentName()
获取当前查询操作所在的历史时刻的版本名称。QueryMode
getQueryMode()
返回查询类型,SuperMap 支持一般查询、模糊查询和窗口查询。String
getQueryVersionName()
获取当前查询操作所在版本的名称。double
getResolution()
获取查询分辨率。String[]
getResultFields()
返回查询结果字段集合。SpatialQueryMode
getSpatialQueryMode()
返回空间查询操作模式。Object
getSpatialQueryObject()
返回空间查询中的搜索对象。TimeCondition[]
getTimeConditions()
获取单时间字段时空模型查询条件。void
setAttributeFilter(String value)
设置查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句。void
setCursorType(CursorType value)
设置查询所采用的游标类型。void
setGroupBy(String[] value)
设置 SQL 查询分组条件的字段。void
setHasGeometry(boolean value)
设置查询结果是否包含几何对象字段。void
setJoinItems(JoinItems joinItems)
设置与外部表的连接信息。void
setLimit(int[] limit)
设置查询限制条数。void
setLinkItems(LinkItems linkItems)
设置与外部表的关联信息。void
setOrderBy(String[] value)
设置 SQL 查询排序的字段。void
setQueryHistoricalMomentName(String strHisVersionName)
设置查询的历史时刻的版本名称,查询结果将以此版本下的数据状态为准。void
setQueryMode(QueryMode value)
设置查询类型,SuperMap 支持一般查询、模糊查询和窗口查询三种查询类型。void
setQueryVersionName(String strVersionName)
设置查询的版本,查询结果将以此版本下的数据状态为准。void
setResolution(double resolution)
设置查询分辨率。void
setResultFields(String[] value)
设置查询结果字段集合。void
setSpatialQueryMode(SpatialQueryMode value)
设置空间查询操作模式。void
setSpatialQueryObject(Object value)
设置空间查询中的搜索对象。void
setTimeConditions(TimeCondition[] conditions)
设置单时间字段时空模型查询条件。String
toString()
将此查询参数对象包含的查询参数输出为一个字符串。
-
-
-
构造器详细资料
-
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()
返回查询结果是否包含几何对象字段。- 若查询时不取空间数据,即只查询属性信息,则在返回的
Recordset
中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用Recordset.getGeometry()
将返回空。 - 如果
getHasGeometry()
方法返回值为 true,则getResultFields()
方法将返回所有字段。
- 返回:
- 查询结果包含几何对象字段,返回 true,不包含几何对象字段返回 false。
- 默认值:
- 默认值为 true。
- 若查询时不取空间数据,即只查询属性信息,则在返回的
-
setHasGeometry
public void setHasGeometry(boolean value)
设置查询结果是否包含几何对象字段。- 若查询时不取空间数据,即只查询属性信息,则在返回的
Recordset
中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用Recordset.getGeometry()
将返回空。 - 如果
getHasGeometry()
方法返回值为 true,则getResultFields()
方法将返回所有字段。
- 参数:
value
- 指定查询结果是否包含几何对象字段。
- 若查询时不取空间数据,即只查询属性信息,则在返回的
-
getResolution
public double getResolution()
获取查询分辨率。- 返回:
- 查询分辨率。
-
setResolution
public void setResolution(double resolution)
设置查询分辨率。- 参数:
resolution
- 查询分辨率。- 抛出:
IllegalStateException
- 当前查询条件对象已经被释放
-
getSpatialQueryObject
public Object getSpatialQueryObject()
返回空间查询中的搜索对象。可以是Point2D
,Rectangle2D
,GeoPoint
,GeoLine
,GeoRegion
,DatasetVector
,Recordset
等类型的对象。注意:
- 若搜索对象是数据集或是记录集类型,则必须同被搜索图层对应的数据集的地理坐标系一致。
- 当搜索数据集/记录集中存在对象重叠的情况时,空间查询的结果可能不正确,建议采用遍历搜索数据集/记录集,逐个使用单对象查询的方式进行空间查询。
- 返回:
- 空间查询中的搜索对象。
- 默认值:
- 默认值为 null。
-
setSpatialQueryObject
public void setSpatialQueryObject(Object value)
设置空间查询中的搜索对象。可以是Point2D
,Rectangle2D
,GeoPoint
,GeoLine
,GeoLineM
,GeoRegion
,GeoText
,DatasetVector
,Recordset
等类型的对象。注意:
- 若搜索对象是数据集或是记录集类型,则必须同被搜索图层对应的数据集的地理坐标系一致。
- 当搜索数据集/记录集中存在对象重叠的情况时,空间查询的结果可能不正确,建议采用遍历搜索数据集/记录集,逐个使用单对象查询的方式进行空间查询。
- 参数:
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 查询得到的记录集中的各字段,可以根据指定的字段进行分组,指定的字段值相同的记录将被放置在一起。注意:
- 空间查询(
query
方法)不支持调用setGroupBy
方法,否则可能导致空间查询的结果不正确。 - 只有
setCursorType(CursorType.STATIC)
时,setGroupBy()
方法才有效; setHasGeometry(false)
且setResultFields()
方法中的字段与本方法中的字段相同时,setGroupBy()
方法才有效。- 查询中如果使用了
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()
将此查询参数对象包含的查询参数输出为一个字符串。
-
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.