dorado技术园地

与您共同讨论dorado技术及其应用技巧

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  8 随笔 :: 0 文章 :: 37 评论 :: 1 Trackbacks

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);
posted on 2005-07-25 00:46 dorado技术园地 阅读(4227) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: