<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色吊丝无码| 免费乱理伦在线播放| 国产午夜成人免费看片无遮挡| 亚洲精品第一国产综合精品| 女人18毛片特级一级免费视频 | 色窝窝亚洲av网| 亚洲熟妇丰满多毛XXXX| 最近2018中文字幕免费视频| 亚洲熟妇无码AV| 中文字幕日韩亚洲| 免费在线观看视频网站| 国产尤物在线视精品在亚洲| 亚洲av午夜福利精品一区| 成人性生活免费视频| 东北美女野外bbwbbw免费| 亚洲精品午夜国产va久久| 国产日韩成人亚洲丁香婷婷| 日本黄网站动漫视频免费| 一级特黄色毛片免费看| 亚洲1234区乱码| 永久亚洲成a人片777777| 成年性生交大片免费看| 91视频精品全国免费观看| 亚洲一本一道一区二区三区| 亚洲人成影院在线无码按摩店| 一二三四免费观看在线电影| 国产亚洲精品免费视频播放| 亚洲欧美国产精品专区久久| 久久亚洲精品成人综合| 国产女高清在线看免费观看| 久久久久久精品免费看SSS| 国产精品免费在线播放| 亚洲日韩av无码中文| 久久夜色精品国产噜噜噜亚洲AV| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲成AV人片在WWW| 亚洲视频2020|