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()
将此查询参数对象包含的查询参数输出为一个字符串。
|
public QueryParameter()
public QueryParameter(QueryParameter queryParameter)
queryParameter
- 指定的 QueryParameter 对象。public CursorType getCursorType()
CursorType
DYNAMIC
类型。public void setCursorType(CursorType value)
进行关联查询,必须设置游标为静态游标。
value
- 指定查询所采用的游标类型。CursorType
setLinkItems()
方法的示例。public QueryMode getQueryMode()
QueryMode
public void setQueryMode(QueryMode value)
value
- 指定查询类型。QueryMode
public String getAttributeFilter()
对于不同引擎的数据源,不同函数的适用情况及函数用法有所不同:
1.对于数据库型数据源(Oracle Plus、SQL Server Plus、PostgreSQL 和 DB2 数据源),函数的用法请参见数据库相关文档。
2.对于文件型数据源(UDB 数据源),可参见SQL查询技术文档。
public void setAttributeFilter(String value)
对于不同引擎的数据源,不同函数的适用情况及函数用法有所不同:
1.对于数据库型数据源(Oracle Plus、SQL Server Plus、PostgreSQL 和 DB2 数据源),函数的用法请参见数据库相关文档。
2.对于文件型数据源(UDB 数据源),可参见SQL查询技术文档。
value
- 查询所构建的 SQL 条件语句,即 SQL WHERE clause 语句以字符串的形式作为参数整体传入。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(); }
public TimeCondition[] getTimeConditions()
public void setTimeConditions(TimeCondition[] conditions)
conditions
- 时间查询条件数组。public void AddTimeCondition(TimeCondition timecondition)
timecondition
- 时间查询条件。public boolean getHasGeometry()
Recordset
中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用 Recordset.getGeometry()
将返回空。getHasGeometry()
方法返回值为 true,则 getResultFields()
方法将返回所有字段。
public void setHasGeometry(boolean value)
Recordset
中,凡是对记录集的空间对象进行操作的方法,都将无效,例如,调用 Recordset.getGeometry()
将返回空。getHasGeometry()
方法返回值为 true,则 getResultFields()
方法将返回所有字段。
value
- 指定查询结果是否包含几何对象字段。public double getResolution()
public void setResolution(double resolution)
resolution
- 查询分辨率。IllegalStateException
- 当前查询条件对象已经被释放public Object getSpatialQueryObject()
Point2D
,Rectangle2D
,GeoPoint
,GeoLine
,GeoRegion
,DatasetVector
,Recordset
等类型的对象。
注意:
public void setSpatialQueryObject(Object value)
Point2D
,Rectangle2D
,GeoPoint
,GeoLine
,GeoLineM
,GeoRegion
,GeoText
,DatasetVector
,Recordset
等类型的对象。
注意:
value
- 空间查询中的搜索对象。public SpatialQueryMode getSpatialQueryMode()
NONE
模式。public void setSpatialQueryMode(SpatialQueryMode value)
value
- 空间查询操作模式。public String[] getOrderBy()
对于 SQL 查询得到的记录集中的各记录,可以根据指定的字段进行排序,并可以指定为升序排列或是降序排列,其中 asc 表示升序,desc 表示降序。
注意用于排序的字段必须为数值型。
public void setOrderBy(String[] value)
对于 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(); }
public String[] getGroupBy()
public void setGroupBy(String[] value)
注意:
query
方法)不支持调用 setGroupBy
方法,否则可能导致空间查询的结果不正确。setCursorType(CursorType.STATIC)
时, setGroupBy()
方法才有效;setHasGeometry(false)
且 setResultFields()
方法中的字段与本方法中的字段相同时,setGroupBy()
方法才有效。setGroupBy()
方法,在查询非几何对象字段(即 setHasGeometry(false)
)时,返回的记录集为只读。value
- SQL 查询分组条件的字段。public JoinItems getJoinItems()
JoinItems
对象。public void setJoinItems(JoinItems joinItems)
joinItems
- 指定与外部表的连接信息。public LinkItems getLinkItems()
LinkItems
对象。public void setLinkItems(LinkItems linkItems)
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); }
public int[] getLimit()
IllegalStateException
- 当前查询条件对象已被释放。public void setLimit(int[] limit)
limit
- 查询限制条数数组。IllegalStateException
- 当前查询条件对象被释放。public String[] getResultFields()
public void setResultFields(String[] value)
注意:对 setResultField()
方法的设置,只有当 setHasGeometry(false)
时才有效,否则返回全部的字段。
value
- 查询结果字段集合。public String toString()
public void dispose()
public String getQueryVersionName()
public void setQueryVersionName(String strVersionName)
strVersionName
- 版本名称,默认是 default 版本public String getQueryHistoricalMomentName()
public void setQueryHistoricalMomentName(String strHisVersionName)
strHisVersionName
- 历史时刻的版本名称Copyright © 2021–2024 SuperMap. All rights reserved.