<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 115  文章 - 481  trackbacks - 0
    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    ?? 對數據庫的操作無外乎CRUD,不管是多大規模的數據庫,貫穿數據庫操作的全部過程的就是數據庫事務的管理。? 一般情況下,我們對數據庫的操作基本上都是基于默認的事務管理,就是說每次執行后都是自動提交,當然,大部分的情況下這種操作可以正確執行響應的業務要求,但是對于一些業務數據要求比較嚴格的系統來說,處理好程序中事務將是一個非常重要的內容。

    對于目前EasyDBO中事務處理的一些看法,不知道對不對,對這個研究不是很深入。

    首先我們可以看到EasyDBO是線程安全的,但是EasyJDBEngine是非線程安全的,每次實例話一個EasyDBO的時候,都是重新實例化一個EasyJDBEngine。目前程序中通過EasyJDBEngine和DatabaseDAO實現的事務的支持,但是覺得有一些地方欠妥,首先利用這個函數private void UpdateBatch(Vector vector)實現手動事務的提交,個人覺得是沒有真正利用到JDBC的事務管理功能,該函數只是簡單的將所有的操作放到一起來統一執行,當一次要求執行的操作特別多的時候未免效率低下了。

    另外一點我覺得在事務管理方面沒有真正利用JDBC的事務管理,JDBC事務管理實際上是在JDBC Connection中實現的,事務周期僅限于Connection的生命周期內(JTA才真正實現的夸Connection的事務管理),我們來看一個添加的函數

    ? ? public boolean add(DBObject obj) { // 添加一個對象
    ? ? ? ?DatabaseDAO dba = null; // 引入數據庫操作工具類
    ? ? ? ?String sql = sqlQuery.getInsertSql(obj);
    ? ? ? ?if (sql.equals("")) {
    ? ? ? ? ? ?logger.error("空的sql語句無法執行!");
    ? ? ? ? ? ?return false;
    ? ? ? ?}
    ? ? ? ?boolean ret = false;
    ? ? ? ?try {
    ? ? ? ? ? ?dba = getDatabaseDAO();
    ? ? ? ? ? ?if (DBOConfig.getInstance().isShow_sql()) {
    ? ? ? ? ? ? ? ?System.out.println("EasyDBO:" + sql);
    ? ? ? ? ? ?}
    ? ? ? ? ? ?dba.prepare(sql);
    ? ? ? ? ? ?if (obj.getValue() != null) {
    ? ? ? ? ? ? ? ?dba.setQueryParams(obj.getValue().values());
    ? ? ? ? ? ?}
    ? ? ? ? ? ?// todo : add piginzoo 加入事務支持
    ? ? ? ? ? ?if (autoCommit == false) {
    ? ? ? ? ? ? ? ?vec.add(dba.getPreparedStatement());
    ? ? ? ? ? ?} else {
    ? ? ? ? ? ? ? ?// rs = dba.preparedQuery();
    ? ? ? ? ? ? ? ?ret = dba.isPreparedUpdate();
    ? ? ? ? ? ? ? ?// dba.close();
    ? ? ? ? ? ?}
    ? ? ? ?} catch (Exception e) {
    ? ? ? ? ? ?logger.error("添加數據錯誤:" + e + ":sql=" + sql);
    ? ? ? ? ? ?e.printStackTrace();
    ? ? ? ? ? ?if (dba != null) {
    ? ? ? ? ? ? ? ?try {
    ? ? ? ? ? ? ? ? ? ?dba.rollback();
    ? ? ? ? ? ? ? ? ? ?// dba.close();
    ? ? ? ? ? ? ? ?} catch (SQLException sqle) {
    ? ? ? ? ? ? ? ?}
    ? ? ? ? ? ?}

    ? ? ? ?} finally {
    ? ? ? ? ? ?try {
    ? ? ? ? ? ? ? ?dba.close();
    ? ? ? ? ? ?} catch (Exception e) {
    ? ? ? ? ? ? ? ?logger.error("釋放數據庫資源錯誤:" + e);
    ? ? ? ? ? ?}
    ? ? ? ?}
    ? ?
    ? ? ? ?return ret;
    ? ?}???
    ???????
    ???????可以發現在一次的添加結束以后,連接被關掉了dba.close();雖然連接沒有被真正的關掉,只是返回了連接池當中;??但是你肯定不能確定如果同一次執行多個操作的時候,能夠利用的同一個Connection,所以說JDBC的事務也就無從?說起了。

    ? ? ? ?當然我看到現在程序在實際應用中可能還沒有真正利用到這個手動事務管理的功能,但是我覺得這樣設計事務好像??有點效率上的問題,當然最重要的是沒有真正利用到JDBC 的事務管理功能。
    (本文作者:EasyJF開源團隊? William 歡迎轉載,轉載請保留作者聲明,謝謝!)?
    posted on 2006-07-03 09:04 簡易java框架 閱讀(960) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品免费在线观看| 亚洲成av人片天堂网无码】| 国产成人免费ā片在线观看老同学| 国产在线观看免费视频播放器| 亚洲日本VA午夜在线影院| 日韩免费观看一级毛片看看| 亚洲国产精品ⅴa在线观看| 国产一级淫片a视频免费观看| 美女视频免费看一区二区| 亚洲日韩在线第一页| 毛片基地看看成人免费| 亚洲国产精品无码久久久秋霞2| 久久国产精品国产自线拍免费| 亚洲AV美女一区二区三区| 69xx免费观看视频| 亚洲字幕AV一区二区三区四区| 日本黄页网站免费| 曰批全过程免费视频免费看| 国产亚洲精品资源在线26u| 最近中文字幕2019高清免费| 97se亚洲国产综合自在线| 日韩亚洲国产综合久久久| 成人av片无码免费天天看| 亚洲精品成人久久| 国产猛烈高潮尖叫视频免费| www免费插插视频| 亚洲春黄在线观看| 国产人成免费视频| 无码国产精品一区二区免费16| 亚洲一区在线视频观看| 亚洲国产成人精品91久久久| 三年片在线观看免费观看大全动漫 | 无码一区二区三区免费| 亚洲五月综合网色九月色| 亚洲国产日韩在线观频| 1000部拍拍拍18勿入免费视频下载 | 国产视频精品免费| 在线看片免费人成视频福利| 久久精品国产亚洲AV久| 亚洲中文字幕无码爆乳AV| 性感美女视频免费网站午夜 |