如何使用Dorado中的JDBC事务?

如何使用Dorado中的JDBC事务?

Dorado提供默认的提交操作中,用户可能会有其他自定义的数据更新操作,如何使他们都处于一个事务中呢?

方法一: 使用标准的JDBC对象完成数据操作.

Dorado提供了一个工具类,com.bstek.dorado.common.TransactionManager,该类提供一个静态方法:

Transaction getTransaction(DoradoContext context) throws java.lang.Exception

获取与指定的上下文(DoradoContext)相关的事务对象.

这样我们得到一个默认的处理事务对象,通过该事务对象提供的方法:

Connection getConnection(java.lang.String dataSource) throws java.lang.Exception

获取一个与本事务相关的Connection,自定义的更新就通过这个Connection对象处理,最后系统会自动管理整个事务。

代码示例:  

Transaction transaction  =  TransactionManager.getTransaction(context);
Connection connection 
=  transaction.getConnection( null );
try   {
    
// 利用connection对象进行数据操作.
}

finally   {
    connection.close();
}

注意

Connection 对象,你可以执行close操作,但是不允许执行commitrollback操作。因为commitrollback操作将在系统所有更新完成之后才允许进行, commitrollback操作是由Transaction对象管理的。

即使您在Transaction执行commit之前对Connection执行了close操作也不会影响到你在该Connection上所作得数据修改. 您不必担心由于提前关闭了Connection而导致所作的数据修改脱离了事务.

方法二: 使用标准的doradoDatasetDBStatement对象完成数据操作.

除了使用上面的方法之外, 我们还可以使用dorado中提供的DatasetDBStatement对象完成数据操作. 这种做法优点在于:

1.       可直接集成Context中的当前事务, 代码量小.

2.       支持命名参数, 使用方便.

使用SqlDataset添加记录的代码示例:

AutoSqlDataset dataset  =   new  AutoSqlDataset();
dataset.setOriginTable(
" employee " );  // 设置要操作的数据库表名
dataset.setKeyFields( " employee_id " );  // 设置该表的主键(在更新或删除记录时必须设置)    

dataset.insertRecord(); 
// 插入一条空记录
//  以下代码设置新记录的值
dataset.setString( " employee_id " " GUOLIWEI " );
dataset.setString(
" employee_name " " 国莅伟 " );
dataset.setBoolean(
" sex " false );    

dataset.insertRecord(); 
// 插入另一条空记录
//  以下代码设置新记录的值
dataset.setString( " employee_id " " PANLONG " );
dataset.setString(
" employee_name " " 盘龙 " );
dataset.setBoolean(
" sex " true );

dataset.update(context); 
// 将所做的修改更新到数据库中


使用DBStatement对象的代码示例:

DBStatement statement  =   new  DBStatement(
    
null " INSERT INTO LOG (MSG_TIME, MSG) VALUES (:timestamp, :message) " );
ParameterSet parameters 
=  statement.parameters();    

// 添加一条记录
parameters.setDate( " timestamp " new  Date());
parameters.setString(
" message " " XXX XXX XXX " );
statement.execute(context);

// 添加另一条记录
parameters.setDate( " timestamp " new  Date());
parameters.setString(
" message " " YYY YYY YYY " );
statement.execute(context);

你可能感兴趣的:(如何使用Dorado中的JDBC事务?)