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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 三江| 安康市| 凤阳县| 钟山县| 卢湾区| 遵化市| 墨玉县| 如皋市| 河北省| 寿光市| 安福县| 邢台市| 吉木萨尔县| 金秀| 恩平市| 尤溪县| 文安县| 潮州市| 关岭| 茶陵县| 西城区| 浦江县| 广河县| 望奎县| 内黄县| 扎囊县| 乌鲁木齐县| 慈溪市| 镇远县| 阳春市| 腾冲县| 通江县| 双流县| 上思县| 都匀市| 滕州市| 兰坪| 冕宁县| 江西省| 南皮县| 汶川县|