GeoTools getFeatures需要永远

时间:2016-04-12 08:59:53

标签: java oracle database-connection geotools

我将以下方法编写为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);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果过滤器是'id'过滤器,则可能是Oracle表中该列没有索引。如果是这种情况,数据库将进行全表扫描。

假设您拥有地理空间索引并假设用户在给定区域上“放大”,您可以将用户视口的地理边界添加到查询中。使用该查询,数据库可以使用地理索引。

或者,如果按功能ID的查找是常见的,您可以在表的fid / id列上创建索引。