2016-04-12 2 views
0

J'ai écrit la méthode suivante en tant que gestionnaire onClick. Premier et deuxième clic, j'ai obtenu le résultat de DB. Par la troisième fois, le code s'est arrêté dans la ligne "getFeatures (trgtFilter)" et n'est pas revenu. En mode débogage, j'ai vu qu'il attend une connexion DB. Quelqu'un peut-il me dire ce que j'ai mal fait? J'utilise GeoTools 15 et Oracle 12.GeoTools getFeatures prend une éternité

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

Répondre

0

Si le filtre est un filtre « id », il pourrait être qu'il n'y a pas d'index sur cette colonne dans la table Oracle. Si c'est le cas, la base de données effectuera une analyse de table complète.

En supposant que vous disposez d'un index géospatial et que vous supposez que l'utilisateur est "zoomé" sur une zone donnée, vous pouvez ajouter les limites géographiques de la fenêtre de l'utilisateur à la requête. Avec cette requête, la base de données peut utiliser le géo-index.

Vous pouvez également créer un index sur la colonne fid/id de la table si les recherches par identifiant d'entité sont communes.