我将以下方法编写为onClick处理程序。第一次和第二次点击,我得到了DB的结果。第三次,代码在“getFeatures(trgtFilter)”行中停止并且没有返回。在调试模式下,我看到它正在等待数据库连接。谁能告诉我我做错了什么?我正在使用GeoTools 15和Oracle 12。
private Geometry getNewGeometry(String refID) throws Exception {
if (trgLayer != null) {
Connection con = null;
OracleConnection oraCon=null;
FeatureIterator<SimpleFeature> itr = null;
try {
con = ((JDBCDataStore) srcLayer.getFeatureSource().getDataStore()).getConnection(Transaction.AUTO_COMMIT);
oraCon = (OracleConnection) new DelegatingConnection(con).getInnermostDelegate();
Filter trgtFilter = editTask.getConfiguration().getReferenceFilter(trgLayer, refID);
FeatureCollection fc = trgLayer.getFeatureSource().getFeatures(trgtFilter);
itr = fc.features();
if (!itr.hasNext())
return null;
...
} catch (Exception e) {
throw e;
} finally {
if (itr != null)
itr.close();
if (oraCon != null) {
try {
oraCon.close();
if (con != null && !con.isClosed())
con.close();
} catch (SQLException e) {
LOGGER.error("", e);
}
}
}
}
}
答案 0 :(得分:0)
如果过滤器是'id'过滤器,则可能是Oracle表中该列没有索引。如果是这种情况,数据库将进行全表扫描。
假设您拥有地理空间索引并假设用户在给定区域上“放大”,您可以将用户视口的地理边界添加到查询中。使用该查询,数据库可以使用地理索引。
或者,如果按功能ID的查找是常见的,您可以在表的fid / id列上创建索引。