📄 databaseimpl.java
字号:
/**
* 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 + -