geodatabaseojb.java

来自「用于GIS(全球地理系统)的分析和处理的代码。」· Java 代码 · 共 492 行 · 第 1/2 页

JAVA
492
字号
    /////////////////////////////////////////////////////////////////////////////////////////
    ///// gestion de la persistance /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////        
    /** Rend persistant un objet. 
        A appeler a l'interieur d'une transaction ouverte.*/
    public void makePersistent(Object obj) {
        try {
            _db.makePersistent(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
       
    /** Detruit un objet persistant. 
        A appeler a l'interieur d'une transaction ouverte. */
    public void deletePersistent(Object obj) {
        try {
            _db.deletePersistent(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }        
                
    
    
    /////////////////////////////////////////////////////////////////////////////////////////
    ///// chargement d'objets ///////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////
    /** Charge l'objet d'identifiant id. 
        Passer un Integer pour id, si l'identifiant est un int.
        Renvoie null si l'objet d'identifiant id n'existe pas.*
        A appeler a l'interieur d'une transaction ouverte. */
    public java.lang.Object load(Class clazz, Object id) {
        try {                
            OQLQuery query = _odmg.newOQLQuery();
            query.create("select x from "+clazz.getName()+" where id = $0");
            query.bind( id );
            DList result = (DList) query.execute();
            if (result.size() > 0) return result.get(0);
            else {                  
                System.out.println("objet non trouve - id = "+id); 
                return null;
            }
        } catch (Exception ee) {
            ee.printStackTrace();
            return null;
        }
    }            
    
    /** Charge tous les objets persistants de la classe theClass et les met dans une liste.
        A appeler a l'interieur d'une transaction ouverte. */    
    public List loadAll(Class theClass) {
        try {
            OQLQuery query = _odmg.newOQLQuery();
            query.create("select x from "+theClass.getName());
            DList result = (DList) query.execute();
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }        
    
	/** Charge tous les FT_Feature de la classe theClass dans la classe FT_FeatureCollection.
		A appeler a l'interieur d'une transaction ouverte. 
		La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide. */
	public FT_FeatureCollection loadAllFeatures(Class featureClass) {
	  FT_FeatureCollection result = new FT_FeatureCollection();
	  if ((FT_Feature.class).isAssignableFrom(featureClass)) {
		try {
			OQLQuery query = _odmg.newOQLQuery();
			query.create("select x from "+featureClass.getName());
			DList list = (DList) query.execute();
			Iterator iter = list.iterator();
			while (iter.hasNext()) {
				FT_Feature feature = (FT_Feature) iter.next();
				result.add(feature);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	  } else {
		System.out.println("loadAllFeatures() : La classe passee en parametre n'est pas une sous-classe de FT_Feature");
	  }
	  return result;
	}
    
	/** Charge tous les FT_Feature de la classe theClass dans la classe featureListClass.
		A appeler a l'interieur d'une transaction ouverte. 
		La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide.
		La classe featureListClass doit etre un sous classe de FT_FeatureCollection.*/
	public Object loadAllFeatures(Class featureClass, Class featureListClass) {
	  Object result = null;
	  try {
		  result = featureListClass.newInstance();
	  } catch (Exception e)  {
		  e.printStackTrace();
	  }
	  if ((FT_Feature.class).isAssignableFrom(featureClass)) {
	  	try {
            OQLQuery query = _odmg.newOQLQuery();
            query.create("select x from "+featureClass.getName());
            DList list = (DList) query.execute();
            Iterator iter = list.iterator();
            while (iter.hasNext()) {
                FT_Feature feature = (FT_Feature) iter.next();      
                result.getClass().getMethod("add", new Class[]{FT_Feature.class}).invoke(result,new Object[] {feature});
            }
	  	} catch (Exception e) {
	  		e.printStackTrace();
	  	}
	  } else {
		System.out.println("loadAllFeatures() : La classe passee en parametre n'est pas une sous-classe de FT_Feature");
	  }
	  return result;
    }
    



	/////////////////////////////////////////////////////////////////////////////////////////
	///// OQL ///////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////////////                    
    /** Execute la requete OQL query, la lie avec le parametre param, et met le resultat dans une liste.
        A appeler a l'interieur d'une transaction ouverte.  
        On peut passer null pour param, si on ne souhaite lier la requete a aucune variable. */
    public  List loadOQL(String query, Object param) {
        OQLQuery oqlQuery = _odmg.newOQLQuery();
        try {
            oqlQuery.create(query);
            oqlQuery.bind( param );
            DList result = (DList) oqlQuery.execute();        
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }        

    /** Cree une requete OQL */
    public OQLQuery newOQLQuery() {
        return _odmg.newOQLQuery() ;
    }
    
    
        
    /////////////////////////////////////////////////////////////////////////////////////////
    ///// Metadonnees sur le mapping ////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////    
    /** Renvoie le tableau des metadonnees. */
    public List getMetadata() {
        return _metadataList;
    }
    
    /** Renvoie les metadonnees de la classe theClass. 
        theClass doit etre une classe definie dans le mapping.*/
    public Metadata getMetadata(Class theClass) {
        for (int i=0; i<_metadataList.size(); i++)
            if (theClass.getName().compareTo(((Metadata)_metadataList.get(i)).getClassName()) == 0)
                return (Metadata)_metadataList.get(i);
        System.out.println("La classe n'est pas dans le fichier de mapping : "+theClass.getName());
        return null;
    }
                
    /** Renvoie les metadonnees de la classe mappee avec la table theTable.
        theTable doit etre une table definie dans le mapping. 
        Si theTable est mappee avec plusieurs classes, en renvoie une. */
    public Metadata getMetadata(String theTable) {
        for (int i=0; i<_metadataList.size(); i++)
            if (((Metadata)_metadataList.get(i)).getTableName() != null)
                if (theTable.compareToIgnoreCase(((Metadata)_metadataList.get(i)).getTableName()) == 0)
                    return (Metadata)_metadataList.get(i);
        System.out.println("La table n'est pas dans le fichier de mapping : "+theTable);
        return null;
    }
    

               
    /////////////////////////////////////////////////////////////////////////////////////////
    ///// SQL ///////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////
    /** Renvoie la connection JDBC sous-jacente. */
    public Connection getConnection() {
        return _conn;
    }        
            
    /** Execute une commande SQL.
        Cette commande ne doit pas renvoyer de resultat : INSERT, UPDATE, DELETE, mais pas SELECT. */
    public void exeSQL(String query) {
        try {
            Connection conn = getConnection();
            Statement stm = conn.createStatement();
            stm.executeQuery(query);
            stm.close();
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }        
    
    /** Execute une requete et met les resultats dans une liste de tableau d'objets.
        Les tableaux ont la taille du nombre d'objets demandes dans le SELECT.
        Exemple d'utilisation du resultat : 
        <tt> List edges = db.exeSQLQuery("SELECT edgeID FROM tableName WHERE ..."). </tt>
        Pour recuperer le premier resultat :
        <tt> edgeId = ( (BigDecimal) ((Object[]) (edges.get(0)) )[0] ).intValue(); </tt>  */
    public List exeSQLQuery(String query) {
        List result = new ArrayList();
        try {
            Connection conn = getConnection();
            Statement stm = conn.createStatement();
            ResultSet rs = (ResultSet)stm.executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();
            int nbCol = rsmd.getColumnCount();
            while (rs.next()) {
                Object[] array = new Object[nbCol];
                for (int i=1; i<= nbCol; i++)
                    array[i-1] = rs.getObject(i);
                result.add(array);
            }                
            stm.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }          
    
       
       
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    // getters ODMG ///////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    public Implementation getODMGImplementation() {
    	return _odmg;
    }
   
	public Database getODMGDatabase() {
    	return _db;
    }
    
	public Transaction getODMGTransaction() {
    	return _tx;
    }
   	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?