做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

如何處理幾種常見的數據庫不當連接_MySQL

來源:懂視網 責編:小采 時間:2020-11-09 17:31:22
文檔

如何處理幾種常見的數據庫不當連接_MySQL

如何處理幾種常見的數據庫不當連接_MySQL:在基于J2EE平臺的應用開發中,大多數的應用都需要跟數據庫打交道。而自從接觸JDBC起,我們便不止一次地被告之:數據庫資源是十分寶貴的系統資源,一定要謹慎使用。但令人遺憾的是,在筆者見過的大部分跟數據庫相關的應用開發中,針對數據庫資源的使用總是充斥
推薦度:
導讀如何處理幾種常見的數據庫不當連接_MySQL:在基于J2EE平臺的應用開發中,大多數的應用都需要跟數據庫打交道。而自從接觸JDBC起,我們便不止一次地被告之:數據庫資源是十分寶貴的系統資源,一定要謹慎使用。但令人遺憾的是,在筆者見過的大部分跟數據庫相關的應用開發中,針對數據庫資源的使用總是充斥

在基于J2EE平臺的應用開發中,大多數的應用都需要跟數據庫打交道。而自從接觸JDBC起,我們便不止一次地被告之:數據庫資源是十分寶貴的系統資源,一定要謹慎使用。但令人遺憾的是,在筆者見過的大部分跟數據庫相關的應用開發中,針對數據庫資源的使用總是充斥著這樣或者那樣的問題。在本文中,筆者對一些常見的錯誤或者不當的使用數據庫資源的案例進行介紹與分析,幫助讀者避免某些錯誤的發生。

未正確關閉數據庫連接

自增長整數型字段賦值表

申請了數據庫連接,卻沒有及時關閉,這是最常見的數據庫連接使用方面的錯誤。犯這種錯誤的原因很多,以下是常見的一種比較低級的錯誤:

public void foo() {Connection conn=getConnection();Statement stmt = null;try {conn=getConnection();stmt=conn.createStatement(); } catch(Exception e) { } finally {close(stmt, conn); }}


在上述案例中的第2行代碼中,作者申請了一個Connection,但在第6行代碼中,又申請了一個新的,并且丟失了第一次申請的 Connection的引用。至此,當程序每調一次Foo方法,將導致申請一個新的Connection而沒有釋放它。因此,當數據庫達到最大連接數時,將導致整個應用的運行失敗。

避免這種錯誤的方法有很多,譬如,可采用類似于FindBugs的代碼分析工具對應用的源碼進行分析,找出可能產生錯誤的代碼。

此外,在應用中,我們要頻繁地對申請的數據庫連接進行關閉與釋放。此時,建議封裝成某些工具類使用,并且要盡可能安全地關閉數據庫連接。

任意申請數據庫連接

不考慮事務上下文,任意申請數據庫連接資源也是常見的不當用法。但這種問題往往是難以克服的,根源在于Java是一種面向對象的語言,而數據庫的事務卻是一種批量化的操作過程。我們以常見的序列號的實現方案為例:在某些應用場景中,我們需要一種自增長的整數型字段。但由于不同的數據庫有不同的實現,所以,為達到各個數據庫兼容的目的,我們常用的解決方案是,新建一張T_SEQUENCE表,它可能包含的字段有:NAME varchar(100), CURRENT_VAL number(10);其中,NAME存放序列的名稱,而CURRENT_VAL存放序列的當前值。假設某一業務對象Customer需要新增一筆記錄時,為獲得不重復且自增長的Customer ID,需要將T_SEQUENCE表中與該業務表對應的序列號加1并更新,然后將更新后的值作為Customer的ID。我們以面向對象的3種方法來實現:

public class Customer {/更新序列號使其加1/public void sequencePlus(){Connection conn=null; Statement stmt =null; ……//將T_SEQUENCE的序列號當前值加1;}/獲取當前序列號/public int getSequenceCurrentVal(){Connection conn=null;Statement stmt=null;ResultSet rset =null;……// 獲取當前的序列號值;} /新增一條Customer記錄,自動根據序列號生成主鍵/public void addCustomer(String name) {Connection conn=null;PreparedStatement stmt = null;ResultSet rset=null;sequencePlus();// 序列號加1;int id = getSequenceCurrentVal(); // 得到當前序列號;…….// 將最新序列號作為新的T_Customer記錄的主鍵插入;} }

針對這種應用場景,我們首先需要認識到:上述3個方法應該屬于同一個數據庫事務。否則,在并發情況下,將出現由于主鍵重復而導致數據插入失敗的情況。但同時,我們也需要看到:即便上述3個方法的執行位于同一個事務中,但3個方法使用的是不同的數據庫連接,雖然在sequencePlus方法中將 T_SEQUENCE表中的數據加1 ,但在事務并未提交的情況下,由于Connection隔離級別的原因,在getSequenceCurrentVal方法中,是看不到 sequencePlus方法中更新以后的數據的。這樣,也將導致數據插入失敗,因為主鍵勢必跟舊有ID值重復。

因此,傳統編程方法為克服上述問題,只有在上述的方法中使用同一個Connection,才能夠保證業務數據的正確

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

如何處理幾種常見的數據庫不當連接_MySQL

如何處理幾種常見的數據庫不當連接_MySQL:在基于J2EE平臺的應用開發中,大多數的應用都需要跟數據庫打交道。而自從接觸JDBC起,我們便不止一次地被告之:數據庫資源是十分寶貴的系統資源,一定要謹慎使用。但令人遺憾的是,在筆者見過的大部分跟數據庫相關的應用開發中,針對數據庫資源的使用總是充斥
推薦度:
標簽: 常用 連接 處理
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 承德县| 沙湾县| 谷城县| 五莲县| 九寨沟县| 霍林郭勒市| 合作市| 二手房| 丰县| 陇川县| 浪卡子县| 长白| 镇安县| 盐池县| 广河县| 揭西县| 洪雅县| 深圳市| 菏泽市| 安达市| 白山市| 牙克石市| 雷州市| 泰兴市| 吉林省| 阿拉善盟| 麟游县| 来宾市| 蓬莱市| 东台市| 襄汾县| 宕昌县| 丰顺县| 萝北县| 科技| 万盛区| 平乡县| 黄龙县| 扎鲁特旗| 斗六市| 鄢陵县|