2016-04-12 6 views
0

Ich schrieb die folgende Methode als onClick-Handler. Erster und zweiter Klick, ich habe Ergebnis von DB bekommen. Zum dritten Mal stoppte der Code in der Zeile "getFeatures (trgtFilter)" und kehrte nicht zurück. Im Debug-Modus habe ich gesehen, dass es auf die DB-Verbindung wartet. Kann mir jemand sagen, was ich falsch gemacht habe? Ich verwende GeoTools 15 und Oracle 12.GeoTools getFeatures dauert für immer

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); 
       } 
      } 
     } 
    } 
} 

Antwort

0

Wenn der Filter ein ‚id‘ Filter ist, könnte es sein, dass es auf dieser Spalte in der Oracle-Tabelle kein Index vorhanden ist. Wenn dies der Fall ist, führt die Datenbank einen vollständigen Tabellenscan durch.

Angenommen, Sie haben einen Geodatenindex und gehen davon aus, dass der Benutzer für einen bestimmten Bereich "vergrößert" ist, können Sie die Geo-Grenzen des Benutzer-Ansichtsfensters der Abfrage hinzufügen. Mit dieser Abfrage kann die Datenbank den Geo-Index verwenden.

Alternativ können Sie einen Index für die Spalte fid/id für die Tabelle erstellen, wenn Suchvorgänge nach Feature-ID üblich sind.