dorado技術(shù)園地

          與您共同討論dorado技術(shù)及其應(yīng)用技巧

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            8 隨筆 :: 0 文章 :: 37 評(píng)論 :: 1 Trackbacks

          Dorado提供默認(rèn)的提交操作中,用戶可能會(huì)有其他自定義的數(shù)據(jù)更新操作,如何使他們都處于一個(gè)事務(wù)中呢?

          方法一: 使用標(biāo)準(zhǔn)的JDBC對(duì)象完成數(shù)據(jù)操作.

          Dorado提供了一個(gè)工具類,com.bstek.dorado.common.TransactionManager,該類提供一個(gè)靜態(tài)方法:

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

          獲取與指定的上下文(DoradoContext)相關(guān)的事務(wù)對(duì)象.

          這樣我們得到一個(gè)默認(rèn)的處理事務(wù)對(duì)象,通過(guò)該事務(wù)對(duì)象提供的方法:

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

          獲取一個(gè)與本事務(wù)相關(guān)的Connection,自定義的更新就通過(guò)這個(gè)Connection對(duì)象處理,最后系統(tǒng)會(huì)自動(dòng)管理整個(gè)事務(wù)。

          代碼示例: 

          Transaction transaction = TransactionManager.getTransaction(context);
          Connection connection 
          = transaction.getConnection(null);
          try {
              
          // 利用connection對(duì)象進(jìn)行數(shù)據(jù)操作.
          }

          finally {
              connection.close();
          }

          注意

          Connection 對(duì)象,你可以執(zhí)行close操作,但是不允許執(zhí)行commitrollback操作。因?yàn)?/SPAN>commitrollback操作將在系統(tǒng)所有更新完成之后才允許進(jìn)行, commitrollback操作是由Transaction對(duì)象管理的。

          即使您在Transaction執(zhí)行commit之前對(duì)Connection執(zhí)行了close操作也不會(huì)影響到你在該Connection上所作得數(shù)據(jù)修改. 您不必?fù)?dān)心由于提前關(guān)閉了Connection而導(dǎo)致所作的數(shù)據(jù)修改脫離了事務(wù).

          方法二: 使用標(biāo)準(zhǔn)的doradoDatasetDBStatement對(duì)象完成數(shù)據(jù)操作.

          除了使用上面的方法之外, 我們還可以使用dorado中提供的DatasetDBStatement對(duì)象完成數(shù)據(jù)操作. 這種做法優(yōu)點(diǎn)在于:

          1.       可直接集成Context中的當(dāng)前事務(wù), 代碼量小.

          2.       支持命名參數(shù), 使用方便.

          使用SqlDataset添加記錄的代碼示例:

          AutoSqlDataset dataset = new AutoSqlDataset();
          dataset.setOriginTable(
          "employee"); //設(shè)置要操作的數(shù)據(jù)庫(kù)表名
          dataset.setKeyFields("employee_id"); //設(shè)置該表的主鍵(在更新或刪除記錄時(shí)必須設(shè)置)    

          dataset.insertRecord(); 
          //插入一條空記錄
          // 以下代碼設(shè)置新記錄的值
          dataset.setString("employee_id""GUOLIWEI");
          dataset.setString(
          "employee_name""國(guó)蒞偉");
          dataset.setBoolean(
          "sex"false);    

          dataset.insertRecord(); 
          //插入另一條空記錄
          // 以下代碼設(shè)置新記錄的值
          dataset.setString("employee_id""PANLONG");
          dataset.setString(
          "employee_name""盤龍");
          dataset.setBoolean(
          "sex"true);

          dataset.update(context); 
          //將所做的修改更新到數(shù)據(jù)庫(kù)中


          使用DBStatement對(duì)象的代碼示例:

          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技術(shù)園地 閱讀(4248) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 外汇| 咸丰县| 耿马| 盖州市| 南雄市| 鄂尔多斯市| 留坝县| 南丹县| 福海县| 兰西县| 双流县| 揭阳市| 永顺县| 进贤县| 新宾| 理塘县| 榆树市| 项城市| 孟村| 湖州市| 龙陵县| 阿拉善左旗| 梓潼县| 连江县| 承德县| 庆安县| 淮滨县| 平昌县| 巴中市| 离岛区| 军事| 抚宁县| 曲阳县| 专栏| 馆陶县| 镇坪县| 靖西县| 新泰市| 泰来县| 鄂托克前旗| 健康|