<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无码不卡无码| 亚洲人成网站观看在线播放| 亚洲ⅴ国产v天堂a无码二区| 九九免费精品视频在这里| 免费永久国产在线视频| 国产成人亚洲毛片| 亚洲国产精品自在拍在线播放| 亚洲av无一区二区三区| yy6080久久亚洲精品| 国产天堂亚洲精品| 中文字幕精品无码亚洲字| 国产特黄一级一片免费| 亚洲国产精品va在线播放| 国产精品免费观看调教网| 亚洲色欲或者高潮影院| 91精品视频免费| 亚洲精品综合在线影院| 国产成人精品123区免费视频| 国产精品亚洲lv粉色| 亚洲精品国产精品乱码不卡| 成人免费ā片在线观看| 亚洲精品天天影视综合网| 国产精品怡红院永久免费| 亚洲人成色99999在线观看| 国产国产成年年人免费看片| 一级毛片免费视频网站| 国产V亚洲V天堂A无码| 亚洲免费观看网站| 久久亚洲中文字幕无码| 久久夜色精品国产亚洲av| 免费视频成人片在线观看| 亚洲人成无码网站在线观看| 在线亚洲精品自拍| 中文字幕成人免费视频| 亚洲国产精品网站在线播放| 亚洲精品无码AV中文字幕电影网站| 日韩精品在线免费观看| 亚洲日韩一中文字暮| 亚洲中文字幕久久精品无码喷水| 中文字幕免费在线看线人| 国产亚洲日韩在线a不卡|