⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databaseimpl.java

📁 JDBF是一个实现o/r mapping 的软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

	 
     /**
      * Return Repository to RepositoryFactory specified in 
      * repositoryViewName
      *
      * @param repositoryViewName name repository
      * @return Repository
      * 
      */
     protected Repository getRepository(String repositoryViewName){
        
         RepositoryView view = (RepositoryView)
		               repFactory.getRepository(repositoryViewName);
         return view;
     }


     /**
      * Return the specific sqlInterface object for the 
      * current database name
      *
      * @param databaseName
      * @throws MappingException
      * 
      */
     protected SqlInterface getCurrentSqlInterface(String databaseName)
         throws MappingException{
         
	 	 String vendor = connectionManager.getConnectionSource(databaseName)
	                					  .getVendor();
	 	 return SqlInterfaceFactory.getSqlInterface(vendor);
     }
      
	 
     /**
      * Insert the object. It handles the following operations:
      * <li> get connection </li>
      * <li> key generator </li>
      * <li> create statement </li>
      * <li> execute statement </li>
      * <li> release connection </li>
      *
      * @param object object to delete
      * @return number of rows affected
      * @throws QueryException if errors occurs
      * @throws MappingException if error occurs
      * @throws KeyGenerationException if error occurs
      *
      */
      public int insert(ObjectMapped object) throws QueryException,
      												MappingException,
      						    					KeyGenerationException{
			           
		  logger.log(Level.INFO,Messages.message("Database.insert"));
		 
		  long initTime = System.currentTimeMillis();
		 
		  String repositoryViewName = object.getRepositoryViewName();
		  RepositoryView view = (RepositoryView)getRepository(repositoryViewName);
		  String databaseName = view.getBeanDescriptor().getDatabaseName();
		  PrimaryKeyMap pkMap = view.getBeanDescriptor().getPrimaryKeyMap();
		  ConnectionSource connSource = connectionManager.getConnectionSource(databaseName);
		  Connection connection = connectionManager.getConnection(databaseName);
		  addConnection(connection);
		  sqlInterface = getCurrentSqlInterface(databaseName);
		  int rows = 0;
		  
		  if(!pkMap.isComposite()){			
		  
		  	  String typeKeyGen = view.getBeanDescriptor().getGeneratorMap().getType();
		  	  Object oid = createOID(view,typeKeyGen,connection,connSource.getVendor());	  
		  	  object.setOID(oid);
		  }
	
		  //create insert statement
		  InsertStatement insertStat = new InsertStatement(view,sqlInterface);		
		  logger.log(Level.FINER,insertStat.toString());
						
		  //execute insert statement
		  rows = insertStat.insert(object,view,connection);
						
		  connectionManager.releaseConnection(databaseName);
		  
		  long endTime = System.currentTimeMillis();
		  long finalTime = endTime - initTime;
		
		  logger.log(Level.INFO,Messages.format("Database.rowsAffected",
		                                      String.valueOf(rows),
		                                      String.valueOf(finalTime)
		                                     )
		          );
						
		  return rows;
      }		
		

      /**
       * Rollback transaction of all databases affected 
       * in sql operations
       */
      public void rollbackTransaction(){
          try{
	          synchronized(this){
		  	      for(int i = 0; i < dbs.size(); i++){
		      		  Connection conn = (Connection)dbs.get(i);  
	              	  rollback(conn);
		  		  }
	      	  }
	  	  }
	  	  catch(Exception e){
	          logger.log(Level.SEVERE,e.getMessage());
	  	  }	      
      }

      
      /**
       * Rollback transaction.
       *
       *<b>Not use this method, you must use rollbackTransaction method!</b>
       *
       * @param connection to rollback
       * @throws TransactionException
       *
       */
      public void rollback(Connection connection) throws TransactionException{
          transaction.rollback(connection);
          logger.log(Level.INFO,Messages.message("Database.rollbackedTx"));
      }
	
	
      /**
       * Execute select statement.
       *
       * @param repositoryViewName is the name of repositoryView
       * @param criteria
       * @return QueryResults a collection of object
       * @throws SQLException
       * @throws MappingException
       *
       */
      public QueryResults select(String repositoryViewName,Criteria criteria)
          throws QueryException,MappingException,CacheException{
		    	
	 	  logger.log(Level.INFO,Messages.message("Database.select"));
	 
	  	  long initTime = System.currentTimeMillis();
	  	  
		  QueryResults results = null;
	  	  RepositoryView view = (RepositoryView) getRepository(repositoryViewName);		  
	  	  String databaseName = (view.getBeanDescriptor().getDatabaseName());
		  PrimaryKeyMap pkMap = view.getBeanDescriptor().getPrimaryKeyMap();
	  	  
  	      sqlInterface = getCurrentSqlInterface(databaseName);
  	      SelectStatement selectStat = new SelectStatement(view,null,criteria,sqlInterface); 
  	      logger.log(Level.FINER,selectStat.toString());		 
      	  	                 
          Connection connection = connectionManager.getConnection(databaseName);
          results = selectStat.select(repositoryViewName,view,connection);
          
		  //Put in cache the objects retrieved
		  while(results.next()){
		      ObjectMapped obj = results.getObject();
		      String cacheId = cacheManager.createId(pkMap,obj);
			  logger.log(Level.INFO,Messages.message("Database.putInCache"));		  	      		  	 
			  cacheManager.putInCache(cacheId,obj,databaseName,
									  repositoryViewName);
		  }
		  results.close();
          connectionManager.releaseConnection(databaseName);
		  		  	
	  	  long endTime = System.currentTimeMillis();
	  	  long finalTime = endTime - initTime;
		  
	  	  logger.log(Level.INFO,Messages.format("Database.rowsAffected",
	                                      String.valueOf(results.size()),
	                                      String.valueOf(finalTime)
	                                     )
	      );
	      
	  	  return results; 
      }
      
      
	  /**
	   * Execute select statement with primary key in where clause.
	   * 
	   * 
	   * @param repositoryViewName is the name of repositoryView
	   * @param primaryKey
	   * @return QueryResults a collection of object
	   * @throws SQLException
	   * @throws MappingException
	   * @see org.jdbf.engine.basic.PrimaryKey
	   */
	  public QueryResults selectByPrimaryKey(String repositoryViewName,PrimaryKey primaryKey)
		  throws QueryException,MappingException,CacheException{
	    	
		  logger.log(Level.INFO,Messages.message("Database.select"));
 
		  long initTime = System.currentTimeMillis();
		  
		  QueryResults results = null;
		  RepositoryView view = (RepositoryView) getRepository(repositoryViewName);
		  PrimaryKeyMap pkMap = view.getBeanDescriptor().getPrimaryKeyMap();
		  String region = view.getBeanDescriptor().getDatabaseName();
		  		  
		  //get object from cache
		  String cacheId = cacheManager.createId(primaryKey,pkMap);
		  
		  ObjectMapped object = cacheManager.getFromCache(cacheId,region,repositoryViewName);
  
		  //if object not exist in cache...
		  if(object == null){
			  
			  logger.log(Level.FINE,Messages.message("Database.cache"));  	  
		  	  //then executes select	  		 
		      SelectStatement selectStat = new SelectStatement(view,null,null,sqlInterface); 
		      //create criteria on primary keys
		      Criteria criteria = selectStat.createClauseOnPk(
		  									repositoryViewName,
		  									view,
		  									primaryKey);
		      results = select(repositoryViewName,criteria);
		  }
		  else{			  
			  ArrayList objs = new ArrayList();
			  objs.add(object);
			  results = new Cursor(objs);
			  long endTime = System.currentTimeMillis();
			  long finalTime = endTime - initTime;
		  
			  logger.log(Level.INFO,Messages.format("Database.rowsAffected",
													String.valueOf(results.size()),
													String.valueOf(finalTime)
												   )
					  );
		  }
		  	  						
		  return results; 		   
	  }
  

      /**
	   * Update the object. It handles the following operations:
	   * <li> get connection </li>
	   * <li> create statement </li>
	   * <li> execute statement </li>
	   * <li> release connection </li>
	   *
	   * @param object object to delete
	   * @param propertiesNames name of proeprties to update
	   * @return number of rows affected
	   * @throws QueryException
	   * @throws MappingException
	   *
	   */
       public int update(ObjectMapped object,String[] propertiesNames) 
           throws QueryException,MappingException,CacheException{
           
           logger.log(Level.INFO,Messages.message("Database.update"));
	 
	   	   long initTime = System.currentTimeMillis();
    	
	   	   String repositoryViewName = object.getRepositoryViewName();
	   	   RepositoryView view = (RepositoryView) getRepository(repositoryViewName);
	   	   PrimaryKeyMap pkMap = view.getBeanDescriptor().getPrimaryKeyMap();
	       String databaseName = view.getBeanDescriptor().getDatabaseName();
	       Connection connection = connectionManager.getConnection(databaseName);
	       addConnection(connection);
           sqlInterface = getCurrentSqlInterface(databaseName);
	       int rows = 0;
				
	       //create statement
	       UpdateStatement updateStat = new UpdateStatement(view,propertiesNames,null,sqlInterface);
	       logger.log(Level.FINER,updateStat.toString());
					
	       //execute statement
	       rows = updateStat.update(object,view,connection,propertiesNames);
					
	       //release connection
	       connectionManager.releaseConnection(databaseName);
	   
	       long endTime = System.currentTimeMillis();
	       long finalTime = endTime - initTime;
	
	       logger.log(Level.INFO,Messages.format("Database.rowsAffected",
	                                      String.valueOf(rows),
	                                      String.valueOf(finalTime)
	                                     )
	             );
	             
	       String cacheId = createCacheId(pkMap,object);
	       cacheManager.replaceObject(cacheId,object,
	                                  databaseName,repositoryViewName);					
	       return rows;
       }


       /**
	    * Update the object. It handles the following operations:
	    * <li> get connection </li>
	    * <li> create statement </li>
	    * <li> execute statement </li>
	    * <li> release connection </li>
	    *
	    * @param repositoryViewName name of repository
	    * @param propertiesNames name of properties to update
	    * @param values of propertiesNames
	    * @param criteria criteria for update
	    * @return number of rows affected
	    * @throws QueryException
	    * @throws MappingException
	    *
	    */
	   public int updateForCriteria(String repositoryViewName,
	                                String[] propertiesNames,Object[] values,
			    	                Criteria criteria) 
	       throws QueryException,MappingException{
    	
    	   logger.log(Level.INFO,Messages.message("Database.update"));
	 
	       long initTime = System.currentTimeMillis();
	    
           RepositoryView view = (RepositoryView) getRepository(repositoryViewName);
	       String databaseName = view.getBeanDescriptor().getDatabaseName();
	       Connection connection = connectionManager.getConnection(databaseName);
	       addConnection(connection);
           sqlInterface = getCurrentSqlInterface(databaseName);
	       int rows = 0;
					
	       //create statement
	       UpdateStatement updateStat = new UpdateStatement(view,propertiesNames,
							     criteria,sqlInterface);
	       logger.log(Level.FINER,updateStat.toString());
					
	       //execute statement
	       rows = updateStat.updateForCriteria(view,connection,propertiesNames,values);
					
	       connectionManager.releaseConnection(databaseName);
	    
	       long endTime = System.currentTimeMillis();
	       long finalTime = endTime - initTime;
	
	       logger.log(Level.INFO,Messages.format("Database.rowsAffected",
	                                      String.valueOf(rows),
	                                      String.valueOf(finalTime)
	                                     )
	              );
					
	       return rows;
        }
}

/*

  $Log: DatabaseImpl.java,v $
  Revision 1.15  2004/06/28 22:11:16  gmartone
  changes for  task 80429 (Enanchement DCS)

  Revision 1.14  2004/05/31 22:34:47  gmartone
  changed for task 99533 (Composite Primary Key)

  Revision 1.13  2004/05/20 22:37:53  gmartone
  Changed for task 99073 (Coverage Javadocs)

  Revision 1.12  2004/05/18 18:02:48  gmartone
  throws QueryException in method that execute sql statement instead of SQLException

  Revision 1.11  2004/04/29 22:35:46  gmartone


  Task 66484 (Logging System)
    
  
*/

⌨️ 快捷键说明

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