2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  本科畢業(yè)論文(設(shè)計(jì))</p><p>  論文(設(shè)計(jì))題目: 基于java數(shù)據(jù)庫連接池的研究</p><p>  學(xué) 院: 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院 </p><p>  專 業(yè) 名 稱: 信息與計(jì)算科學(xué) </p><p><b>  摘

2、 要</b></p><p>  在基于JDBC的數(shù)據(jù)庫實(shí)際應(yīng)用開發(fā)中,對(duì)數(shù)據(jù)庫連接的管理是一個(gè)重點(diǎn)也是一個(gè)難點(diǎn),頻繁對(duì)數(shù)據(jù)庫的連接與關(guān)閉操作 · 多客戶對(duì)數(shù)據(jù)庫的并發(fā)訪問,一定程度上決定了WEB系統(tǒng)的響應(yīng)以及應(yīng)用性能。使用數(shù)據(jù)庫連接池方式能對(duì)數(shù)據(jù)庫的連接進(jìn)行管理和維護(hù),上層應(yīng)用程序通過數(shù)據(jù)庫連接池使用數(shù)據(jù)庫資源能提升系統(tǒng)性能,充分利用系統(tǒng)資源。文章通過介紹 · 分析數(shù)據(jù)庫連接池工

3、作的基本原理,了解目前流行的WEB服務(wù)器在數(shù)據(jù)庫連接池方面的使用現(xiàn)狀后,總結(jié)一了些數(shù)據(jù)庫連接池開發(fā)程序中容易忽略的問題。并在學(xué)習(xí)掌握了實(shí)現(xiàn)連接池的關(guān)鍵技術(shù)后給出了一個(gè)較為高效的連接池管理策略在這種策略思想的指導(dǎo)下實(shí)際開發(fā)出一個(gè)數(shù)據(jù)庫連接池模塊,使得上層應(yīng)用通過本連接池訪問數(shù)據(jù)庫資源變得相對(duì)高效和容易,從實(shí)際上論證了這種設(shè)計(jì)方案的可行性。</p><p>  關(guān)鍵詞:連接池;數(shù)據(jù)庫;JDBC;并發(fā)訪問</p&

4、gt;<p>  Research and realization of the Database </p><p>  Connection Pool Abstract In the practically application development 

5、of database based on JDBC, the management of database connection is a key point and also a difficulty. The response and

6、 performance of the WEB system are depended on frequently connecting, closing and multi-user accessing in a certain extent. U

7、sing the Database Connection Pool can provide management and maintenance for connections of the database. The upper applications m

8、ay access the database recourse via the Database Connec</p><p>  practice. Key words : Database Connection Pool ; Database

9、60;; JDBC ; </p><p>  Concurrence access  </p><p><b>  目  錄</b></p><p><b>  1 引言1</b></p><p>  1.1課程背景1</p>

10、<p>  1.2連接池的主要作用1</p><p>  1.3目前流行的WEB服務(wù)器數(shù)據(jù)庫連接池方面使用現(xiàn)狀1</p><p>  1.3.1 DHCP介紹2</p><p>  1.3.2 poolman介紹2</p><p>  1.3.3 C3P0介紹2</p><p>

11、  1.3.4 其他連接池(自寫連接池)2</p><p>  2 相關(guān)理論基礎(chǔ)3</p><p>  2.1數(shù)據(jù)庫概論3</p><p>  2.2數(shù)據(jù)庫連接池的基本原理3</p><p>  2.3連接池中的關(guān)鍵技術(shù)4</p><p>  2.3.1 連接池的分配與釋放4</p&

12、gt;<p>  2.3.2 連接池的維護(hù)5</p><p>  3 系統(tǒng)總體設(shè)計(jì)思想及方案5</p><p>  3.1連接池中的關(guān)鍵類設(shè)計(jì)6</p><p>  3.2連接池中的管理機(jī)制7</p><p>  3.3實(shí)現(xiàn)一個(gè)連接池的其他問題8</p><p>  3.3.1

13、 事務(wù)處理8</p><p>  3.3.2 封裝9</p><p>  3.3.3 并發(fā)9</p><p>  3.3.4 連接池的關(guān)閉9</p><p>  4 具體的設(shè)計(jì)流程和實(shí)現(xiàn)10</p><p>  4.1連接池的建立10</p><p>  4.2連

14、接池的管理12</p><p>  4.3連接池的關(guān)閉14</p><p>  4.4連接池的測試15</p><p>  5 系統(tǒng)測試問題的總結(jié)15</p><p>  5.1連接池的泄露問題15</p><p>  5.1.1 產(chǎn)生現(xiàn)象15</p><p>  5.

15、1.2 解決辦法16</p><p>  5.2多數(shù)據(jù)庫服務(wù)器問題17</p><p><b>  6 總結(jié)19</b></p><p><b>  參考文獻(xiàn)20</b></p><p><b>  謝 辭21</b></p><p&g

16、t;  1 引言 1.1 課題背景 隨著信息技術(shù)的高速發(fā)展與廣泛應(yīng)用,數(shù)據(jù)庫技術(shù)在信息技術(shù)領(lǐng)域中的位置越來越重要。傳統(tǒng)的開發(fā)模式是:首先在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接;然后進(jìn)行SQL操作,對(duì)數(shù)據(jù)庫中的對(duì)象進(jìn)行查詢,修改和刪除等;最后斷開數(shù)據(jù)庫連接。使用這種開發(fā)模式,對(duì)于一個(gè)簡單的數(shù)據(jù)庫應(yīng)用,由于數(shù)據(jù)庫的訪問不是很頻繁,只需要在訪問數(shù)據(jù)庫時(shí)創(chuàng)建一個(gè)連接,用完后就關(guān)閉它,這樣做不會(huì)明顯增大系統(tǒng)的開

17、銷但是對(duì)于一個(gè)復(fù)雜的數(shù)據(jù)庫應(yīng)用,情況就完全不同了,尤其是大型電子商務(wù)網(wǎng)站,同時(shí)可能有幾百人基至幾千人在線。在這種情況下,用戶操作頻繁的建立、關(guān)閉數(shù)據(jù)庫,會(huì)極大的降低系統(tǒng)的性能,增大系統(tǒng)的開銷,迫使網(wǎng)站的響應(yīng)速度下降,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。針對(duì)這些突出問題,采用運(yùn)行速度更快,數(shù)據(jù)庫訪問效率更高的數(shù)據(jù)庫連接池技術(shù),以提高系統(tǒng)的運(yùn)行效率將是至關(guān)重要的,因此本文提出了一種基于數(shù)據(jù)庫連接池技術(shù)的有效解決方法。以加強(qiáng)對(duì)數(shù)據(jù)庫操作的性能,改善

18、資源使用率,提高應(yīng)用程序的響應(yīng)能力。 1.2連接池的主要作用 一個(gè)應(yīng)用系統(tǒng),同時(shí)有幾百人縣至幾千人頻繁的進(jìn)行數(shù)據(jù)</p><p>  1.3.1DHCP介紹 DBCP應(yīng)Apache的Jakarta組織開發(fā),是目前使用較為廣泛的一個(gè)連接池,一是因?yàn)閠omcat自帶的就是這個(gè)連接池,二是因?yàn)殚_源免費(fèi)。由于其使用的穩(wěn)定性不是很好,普名的開源項(xiàng)目hibernate不再提供對(duì)它的支持。DBCP

19、部分參數(shù)說明如下: datasource:要連接的datasource(通常我們不會(huì)定義在 server. xml)。</p><p>  defaultAutocommit:對(duì)于事務(wù)是否autocommit,默認(rèn)值為true。  defaultReadonly:對(duì)于數(shù)據(jù)庫是否只能讀取,默認(rèn)值為false。  driverclassName:連接數(shù)據(jù)庫所用的

20、 JDBC Driver Class。</p><p>  maxActive:最大連接數(shù)據(jù)庫連接數(shù),設(shè)0為沒有限制。 maxldle:最大等待連接中的數(shù)量,設(shè)0為沒有限制。 maxwait:最大等待秒數(shù),單位為ms,超過時(shí)間會(huì)出錯(cuò)誤信息。 password:登陸數(shù)據(jù)庫所用的密碼。 url:連接數(shù)據(jù)庫的URL。 username:登陸數(shù)據(jù)庫所用

21、的帳號(hào)。 validationQuery:驗(yàn)證連接是否成功,SQL SELECT指令至少要返回一行。 </p><p>  removeAbandoned:是否自我中斷,默認(rèn)是false。 removeAbandonedTimeout:幾秒后會(huì)自我中斷,removeAbandoned必須為true。</p><p>  IogAbandoned:是否記錄中斷事

22、件,默認(rèn)為false。 1.3.2Poolman介紹 Poolman連接池前幾年應(yīng)用較廣泛現(xiàn)在應(yīng)用相對(duì)較少。配置步驟主要是先在/項(xiàng)日名稱/web-Inf/下加入一jar包,然后配置一個(gè)xml文件,文件屬性類似于DBCP,最后在程序中寫出調(diào)用該連接池的方法。 1.3.3C3PO介紹 C3PO是一個(gè)開放源代碼的JDBC 連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實(shí)現(xiàn)JDBC3.

23、0和JDBC2.0擴(kuò)展規(guī)范說明的Connection 和Statement池的Datasource對(duì)象。自從hibemate自帶了c3po以后,c3po很快就受到了廣大程序員的認(rèn)可,其性能上來說比DBCP要好的多。</p><p>  1.3.4其他連接池(自寫連接池) 有些程序員喜歡自己寫連接池,建議不用這樣的方法,因?yàn)檫B接池的管理較為復(fù)雜,自己寫常出現(xiàn)各種各樣的錯(cuò)誤,推薦使用有成熟技術(shù)的

24、連接池,同時(shí)也方便系統(tǒng)的移植。2 相關(guān)理論基礎(chǔ) 2.1 數(shù)據(jù)庫概述 數(shù)據(jù)庫,顧名思義,是存人數(shù)據(jù)的倉庫。只不過這個(gè)倉庫是在計(jì)算機(jī)存儲(chǔ)設(shè)備上的,而且數(shù)據(jù)是按一定格式存放的。</p><p>  當(dāng)人們收集了大量的數(shù)據(jù)后,應(yīng)該把它們保存起來進(jìn)入近一步的處理,進(jìn)一步的抽取有用的信息。當(dāng)年人們把數(shù)據(jù)存放在文件柜中,可現(xiàn)在隨著社會(huì)的發(fā)展,數(shù)據(jù)量急劇增長,現(xiàn)在人們就借助計(jì)算機(jī)和數(shù)據(jù)庫技術(shù)科學(xué)的保存

25、大量的數(shù)據(jù),以便能更好的利用這些數(shù)據(jù)資源。</p><p>  要是下定義的話,就應(yīng)該是:指長期儲(chǔ)存在計(jì)算機(jī)內(nèi)的,有組織的,可共享的數(shù)據(jù)集合。 數(shù)據(jù)庫包含關(guān)系數(shù)據(jù)庫,面向?qū)ο髷?shù)據(jù)庫及新興的XML數(shù)據(jù)庫等多種,目前應(yīng)用最廣泛的是關(guān)系數(shù)據(jù)庫,若在關(guān)系數(shù)據(jù)庫基礎(chǔ)上提供部分面向?qū)ο髷?shù)據(jù)庫功能的對(duì)象關(guān)系數(shù)據(jù)庫。在數(shù)據(jù)庫技術(shù)的早期還曾經(jīng)流行過層次數(shù)據(jù)庫與網(wǎng)狀數(shù)據(jù)庫,但這兩類數(shù)據(jù)庫目前已經(jīng)極少使用。 2.2數(shù)

26、據(jù)庫連接池的基本原理</p><p>  建立“緩沖存儲(chǔ)池”,是數(shù)據(jù)庫連接池的基本設(shè)計(jì)思想。這種技術(shù)類似于CPU中的Cache技術(shù),將預(yù)先設(shè)定好的數(shù)據(jù)庫連接放入該緩沖池中,當(dāng)要建立數(shù)據(jù)庫連接操作時(shí),便從池中取出一個(gè)連接,使用完畢后再將其放回。這樣就達(dá)到了連接復(fù)用的目的,應(yīng)用程序重復(fù)使用一個(gè)數(shù)據(jù)庫連接,在多層結(jié)構(gòu)的應(yīng)用程序中通過連接池技術(shù)可以使系統(tǒng)的性能明顯得到提到。最為關(guān)鍵的是,該方法避免了對(duì)數(shù)據(jù)庫連接的頻繁建立

27、、關(guān)閉,減小了系統(tǒng)開銷,提高了響應(yīng)速度。我們可以通過設(shè)定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連接。更為重要的是我們可以通過連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量,使用情況,為系統(tǒng)開發(fā),測試及性能調(diào)整提供依據(jù)。數(shù)據(jù)庫連接池屬于應(yīng)用程序?qū)Φ讓拥恼{(diào)用,用戶并發(fā)訪問應(yīng)用程序時(shí)會(huì)提交訪問請(qǐng)求,然后通過線程來處理這些請(qǐng)求,并向連接池申請(qǐng)一個(gè)對(duì)數(shù)據(jù)庫操作的連接,操作完畢后將連接釋放。應(yīng)用程序調(diào)用連接池連接的基本工作原理如下圖所示: </p

28、><p>  基于以上原理,連接池的建立會(huì)在后面章節(jié)中做具體描述。為了方便理解,連接池以JSP頁面形式將最大連接數(shù)的設(shè)置、連接池的使用、超時(shí)等待、連接池的關(guān)閉等情況展示出來,給用戶一個(gè)更為直觀的感受。連接的調(diào)用原理如下圖所示:</p><p>  從圖中可以看出當(dāng)程序(JSP. Servlet. Java Bean) 中需要數(shù)據(jù)庫連接時(shí),只需從內(nèi)存中取出

29、一個(gè)來,并將這個(gè)取得的連接加入Vector中,而不用新建連接;使用完畢后放回內(nèi)存中,并將Vector中的已用連接刪除。</p><p>  2. 3 連接池中的關(guān)鍵技術(shù)</p><p>  2.3.1連接池的分配與釋放 連接池的分配與釋放技術(shù)對(duì)系統(tǒng)的性能有很大的影響。合理的分配與釋放,可以提高連接的復(fù)用度,從而降低建立新連接的開銷,同時(shí)還可以加快用戶的訪問速度。對(duì)于連接的管理

30、。每當(dāng)用戶請(qǐng)求一個(gè)連接時(shí),系統(tǒng)首先檢查連接池內(nèi)有沒有空閑連接。如果有就把建立時(shí)間最長(通過容器的順序存放實(shí)現(xiàn))的個(gè)連接分配給他(實(shí)際是先做連接是否有效的判斷,如果可用就分配給用戶,若不可用就把這個(gè)連接刪掉,重新檢測是否還有連接);如果檢查到當(dāng)前所開連接池沒有達(dá)到連接池所允許的最大連接數(shù)(maxconn),就新建一個(gè)連接,如果已經(jīng)達(dá)到,就等待一定的時(shí)間(timeout)。如果在等待的時(shí)間內(nèi)有連接被釋放出來就可以把這個(gè)連接分配給等待的用戶

31、,如果等待時(shí)間超過預(yù)定時(shí)間timeout,則返回空值(null) 系統(tǒng)對(duì)已經(jīng)分配出去正在使用的連接只做計(jì)數(shù)。</p><p>  2.3.2連接池的維護(hù)</p><p>  數(shù)據(jù)庫連接池到底要放置多少個(gè)連接,這是個(gè)配置策略。為了使系統(tǒng)的性能達(dá)到最佳狀態(tài),連接池中的連接數(shù)的設(shè)定顯得尤為重要,我們采用設(shè)置最大連接數(shù)(maxconn)和最小連接數(shù)(minconn)的方式來解決這一問題。

32、所謂最大連接數(shù),即連接池中允許連接的最大數(shù)目,然后,最大連接數(shù)的設(shè)定要通過具體的應(yīng)用需求來給出一個(gè)連接池可以承受的最大連接數(shù)目的最佳點(diǎn)。如果應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中,等待其他連接的釋放后再來調(diào)用一空閑連接(freeconn),這樣可能會(huì)影響部分對(duì)數(shù)據(jù)厙的操作。所謂最小連接數(shù),即應(yīng)用啟動(dòng)前,已經(jīng)預(yù)先創(chuàng)建好的連接數(shù)。無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。

33、如果最小連接數(shù)過大,么系統(tǒng)啟動(dòng)過程將變慢,若應(yīng)用程序?qū)?shù)據(jù)庫的訪問量不大,過多的數(shù)據(jù)庫連接資源將被浪費(fèi),但是系統(tǒng)啟動(dòng)后響應(yīng)更快;如果過小系統(tǒng)啟動(dòng)將加快,但是最初使用的用戶會(huì)因?yàn)檫B接池中沒有足夠的連接而會(huì)發(fā)送一個(gè)新的數(shù)據(jù)庫連接請(qǐng)求,將不可避免的延緩執(zhí)行速度。</p><p>  3 系統(tǒng)總體設(shè)計(jì)思想及方案 數(shù)據(jù)庫連接池技術(shù)的設(shè)計(jì)思想非常簡單,先將數(shù)據(jù)庫連接作為對(duì)象存儲(chǔ)在一個(gè)Vector對(duì)象中,V

34、ector類可以實(shí)現(xiàn)可增長的對(duì)象“數(shù)組”。Vector 的大小可以根據(jù)需要增大或縮小,以適應(yīng)創(chuàng)建Vector后進(jìn)行添加或移除項(xiàng)的操作。這里主要包含使用的連接(nowconnections)和未使用的連接(freeconnections) 兩個(gè) Vector 類創(chuàng) 建的對(duì)象,創(chuàng)建Vector對(duì)象的方法如下:  public DBConnectionpool(ve

35、ctor connections)</p><p>  {  freeconnections = new Vectoro();</p><p>  nowconnections = new Vector(); </p><p><b>  }</b>&l

36、t;/p><p>  當(dāng)外部程序向數(shù)據(jù)庫申請(qǐng)建立連接后系統(tǒng)會(huì)調(diào)用nowconnections.add()方法,此時(shí)已用連接計(jì)數(shù)器加1,相應(yīng)的,調(diào)用freeconnections.Removei()方法,此時(shí)空閑連接計(jì)數(shù)器減1,對(duì)于這樣的引用計(jì)數(shù)法將會(huì)在后面的章節(jié)中具體描述。這樣,不同的數(shù)據(jù)庫訪問請(qǐng)求就可以共享這些連接,并通過復(fù)用這些已經(jīng)建立的數(shù)據(jù)庫連接,克服傳統(tǒng)開發(fā)模式對(duì)數(shù)據(jù)庫操作的缺點(diǎn)。另外,采用超時(shí)判斷(tim

37、eout)機(jī)制,等待應(yīng)用程序?qū)B接的釋放或者調(diào)用Connection.close()方法主動(dòng)釋放連接,能極大地節(jié)省系統(tǒng)資源和用戶等待時(shí)間。而實(shí)現(xiàn)連接池時(shí),當(dāng)應(yīng)用程序調(diào)用Connection.close()試圖去關(guān)閉數(shù)據(jù)庫連接時(shí),這時(shí)需要有一個(gè)通告給連接池實(shí)現(xiàn)模塊,通告對(duì)當(dāng)前的數(shù)據(jù)庫物理連接(DBConnectionPool 對(duì)象)進(jìn)行重用。為了使連接池實(shí)現(xiàn)模塊能得到這種“通告”,連接池實(shí)現(xiàn)模塊必須實(shí)現(xiàn)ConnectionEv

38、entListener 接口,而且同時(shí)需要注冊(cè)成為DBConnectionPool 對(duì)象的監(jiān)聽者。連接池實(shí)現(xiàn)模塊接受到此通告后,不是真正意義上的物理獎(jiǎng)閉、而是將DBConn</p><p>  3.1連接池中的關(guān)鍵類設(shè)計(jì) 一個(gè)連接池應(yīng)用的設(shè)計(jì),需要幾個(gè)關(guān)鍵部分作為支撐,其中最為重要的是DBConnectionPool類和DBConnectionManager類,他們對(duì)連接的建立、

39、管理、釋放起決定性作用。大體作用列舉如下: 1.一個(gè)DBConnectionpool類,該類負(fù)責(zé)從連接池獲取(或創(chuàng)建)連接、將連接返回給連接池、空閑連接的超時(shí)等待、系統(tǒng)關(guān)閉時(shí)釋放所有資源并關(guān)閉所有連接。 2.Datasourceproviderservlet類,該類 負(fù)責(zé)通過上下文環(huán)境讀取配置文件后裝載和注冊(cè)JDBC驅(qū)動(dòng)、數(shù)據(jù)庫名等。 3.一個(gè)DBConnection Manager 

40、;類,該類負(fù)責(zé)按預(yù)先指定的最大連接池?cái)?shù)連初始化連接池、創(chuàng)建DBConnectionpool對(duì)象provider.當(dāng) 所有的連接客戶退出后,關(guān)閉全部連接。</p><p>  4.DBconfig.properties屬性文件,該文件中包含了數(shù)據(jù)庫驅(qū)動(dòng)(DriverName)、數(shù)據(jù)庫URL、數(shù)據(jù)庫表空間名(User)、表空間密碼(Passwold)、連接池最大連接數(shù)(maxconnections)

41、60; 5、即為應(yīng)用程序?qū)B接池中的連接的調(diào)用和釋放,應(yīng)用程序退出后連接池的關(guān)閉。</p><p>  將以上5個(gè)部分串連起來,即是本連接池的簡單設(shè)計(jì)流程。首先應(yīng)用程序向連接池申請(qǐng)連接,就需要通過DBConnectionpool類,DBConnectionManager類對(duì)連接池初始化并且還需要Datasourceproviderservlet類的幫助讀取DBconfig.prope西es文件中的屬性,加

42、載和注冊(cè)JDBC驅(qū)動(dòng),數(shù)據(jù)庫名等,連接池才能初始化成功。之后通過DBConnectionPool類監(jiān)視,管理應(yīng)用程序調(diào)用,釋放的數(shù)據(jù)庫連接,并通過該類的cp對(duì)象將連接使用情況反映在頁面上。連接池管理程序得到某個(gè)連接,而其他線程就不會(huì)得到這個(gè)數(shù)據(jù)庫連接了,此線程使用結(jié)束后,該線程將連接交還給連接池管理程序,以分配給其他等待連接的請(qǐng)求線程。這里連接池充分利用Java的線程同步機(jī)理,使當(dāng)前服務(wù)線程處于等待狀態(tài),直至有空閑的連接出現(xiàn)。最后當(dāng)應(yīng)

43、用程序退出時(shí),通過DBConnectionManager類負(fù)責(zé)連接池的關(guān)閉。</p><p>  3.2連接池中的管理機(jī)制</p><p>  應(yīng)用程序開發(fā)中“三分技術(shù)、七分管理”的思想在連接池的配置中同樣得</p><p>  以體現(xiàn),如何從連接池中取得連接,何時(shí)釋放連接、如何釋放連接等問題還需要為連接池配置更為復(fù)雜的管理機(jī)制,連接池流程的管理如下圖所不,這些屬性

44、定義了連接池與其中每個(gè)連接的有效狀態(tài)值。連接池的自我管理,實(shí)際上就是通過定時(shí)的對(duì)每個(gè)連接的狀態(tài)、連接的數(shù)量進(jìn)行判斷而進(jìn)行相應(yīng)操作。</p><p><b>  3.2.1事務(wù)處理</b></p><p>  前面討論的是關(guān)于使用數(shù)據(jù)庫連接進(jìn)行普通的數(shù)據(jù)庫訪問。對(duì)于事務(wù)處理,情況就變得比較復(fù)雜。因?yàn)槭聞?wù)本身要求原則性的保證,此時(shí)就要求對(duì)于數(shù)據(jù)庫的操作符合要么全部完成,要

45、么什么都不做。如果簡單的采用上述的連接復(fù)用的策略,就會(huì)發(fā)生問題,因?yàn)闆]有辦法控制屬于同一個(gè)事務(wù)的多個(gè)數(shù)據(jù)庫操作方法的動(dòng)作,可能這些數(shù)據(jù)庫操作是在多個(gè)連接上進(jìn)行的,并且這些連接可能被其他非事務(wù)方法復(fù)用。Connectio日本身具有提供了對(duì)于事務(wù)的支持,可以通過設(shè)置Connection的Autocommit屬性為false,顯式的調(diào)用commit或roHback 方法來實(shí)現(xiàn)。但是要安全、高效的進(jìn)行連接復(fù)用,就必須提供相應(yīng)的事務(wù)支持機(jī)制。方法

46、是:采用顯式的事務(wù)支撐方法,每一個(gè)事務(wù)獨(dú)占一個(gè)連接。這種方法可以大大降低對(duì)于事務(wù)處理的復(fù)雜性,并且又不會(huì)妨礙連接的復(fù)用。 連接管理服務(wù)提供了顯式的事務(wù)開始結(jié)束(commit或「o11back)聲明,以及一個(gè)事務(wù)注冊(cè)表,用于登事務(wù)發(fā)起者和事務(wù)使用的連接的對(duì)應(yīng)關(guān)系,通過該表,使用事務(wù)的部分和連接管理部分就隔離開,因?yàn)樵摫硎窃谶\(yùn)行時(shí)根據(jù)實(shí)際的調(diào)用情況動(dòng)態(tài)生成的。事務(wù)使用的連接在該事務(wù)運(yùn)行中</p><p>

47、  3.2.2封裝 從上面的論述可以看出,普通的數(shù)據(jù)庫方法和事務(wù)方法對(duì)于連接的使用(分配,釋放)是不同的,為了便于使用,對(duì)外提供一致的操作接口對(duì)連接進(jìn)行了封裝:普通連接和事務(wù)連接,并利用了Java中的強(qiáng)大的面向?qū)ο筇匦裕欢鄳B(tài)。普通連接和事務(wù)連接均實(shí)現(xiàn)了一個(gè)DBConnection接口,對(duì)于接口中定義的方法,分別根據(jù)自己的特點(diǎn)作了不同的實(shí)現(xiàn),這樣在對(duì)于連接的處理上就非常的一致了。 3.2.3并發(fā) 為了使連接管

48、理服務(wù)有更大的通用性,我們必須要考慮到多線程環(huán)境,即并發(fā)問題。在一個(gè)多線程的環(huán)境下,必須要保證連接管理自身數(shù)據(jù)的一致性和連接內(nèi)部數(shù)據(jù)的一致性,(synchronized關(guān)鍵字),這樣就很容易使連接管理成為線程安全的。 </p><p>  對(duì)于并發(fā)訪問,所有的當(dāng)前請(qǐng)求都將被連接池管理程序按順序鎖定。對(duì)請(qǐng)求線程的鎖定是通過應(yīng)用程序代碼進(jìn)行的,且請(qǐng)求數(shù)量可以很大,不必?fù)?dān)心超出緩沖容量限制。一旦將連接交還給連接池,該連

49、接將由連接池管理程序分配給其他鎖定的請(qǐng)求。當(dāng)有很多數(shù)據(jù)庫請(qǐng)求并超出了連接池中連接的數(shù)目時(shí),只有先發(fā)出數(shù)據(jù)庫請(qǐng)求的線程獲得連接來訪問數(shù)據(jù)庫,其他連接暫時(shí)處于等待的鎖定狀態(tài),當(dāng)線程完成數(shù)據(jù)庫操作并釋放連接后,被釋放的連接將按順序由其他線程獲得,這樣就可以大大節(jié)省服務(wù)器的資源。 3.2.4連接池的關(guān)閉 很多的連接池都要求用戶通過其規(guī)定的方法獲取數(shù)據(jù)庫的連接,這一點(diǎn)我們可以理解,畢竟目前所有的應(yīng)用服務(wù)器取數(shù)據(jù)庫連接的方式都是這種

50、方式實(shí)現(xiàn)的。但是另外一個(gè)共同的問題是,它們同時(shí)不允許使用者顯式的調(diào)用Connection.closeo方法,而需要用其規(guī)定的一個(gè)方法來關(guān)閉連接。這種做法有兩個(gè)缺點(diǎn):</p><p>  第一:改變了用戶使用習(xí)慣,增加了用戶的使用難度。使用者在用完數(shù)據(jù)庫連接后通常是直接調(diào)用連接的close方法來釋放數(shù)據(jù)庫資源。 第二:使連接池?zé)o法對(duì)之中的所有連接進(jìn)行獨(dú)占控制。由于連接池不允許用戶直接調(diào)用連接的close

51、方法,一旦使用者在使用的過程中由于習(xí)慣問題直接關(guān)閉了數(shù)據(jù)庫連接,么連接池將無法正常維護(hù)所有連接的狀態(tài)。 4 具體的設(shè)計(jì)流程和實(shí)現(xiàn) 4.1 連接池的建立</p><p>  應(yīng)用程序中建立的連接池其實(shí)是一個(gè)靜態(tài)的。所謂靜態(tài)連接池是指連接池中的連接在系統(tǒng)初始化時(shí)就已分配好,且不能隨意關(guān)閉連接。Java中提了很多容器類可以方便的構(gòu)建連接池,如:Vector.Stack.Servlet.Bean等,通過

52、讀取連接屬性文件DBconfig.properties與數(shù)據(jù)庫實(shí)例建立連接。(該屬性文件中包含了連接數(shù)據(jù)庫的URL、數(shù)據(jù)庫驅(qū)動(dòng)、數(shù)據(jù)庫表空間、數(shù)據(jù)庫表空間密碼、連接池最大連接數(shù))在系統(tǒng)初始化時(shí),根據(jù)相應(yīng)的配置創(chuàng)建連接并放置在連接池中,這些對(duì)象作為系統(tǒng)可分配的自由連接,以后所使用的連接都是從連接池中獲得,這樣就避免了隨意建立連接,關(guān)閉連接所帶來的資源浪費(fèi)。連接池初始化如下:publicDBConnectionpool(vectorc

53、onnections)</p><p><b>  {</b></p><p>  Freeconneetions = new Vector();  nowconnections = new Vector();  freeconnections = connections;

54、  maxconnections = freeconnections.Size() ;  }本連接池的建立使用輸入流,通過上下文環(huán)境,讀取配置文件(Dbconfig.Prooperties)里預(yù)先設(shè)置的參數(shù),部分代碼如下:public void contextlnitialized(servletcontextEvent event)  {

55、</p><p>  Properties Properties();  Vector connections = new Vector(); Servletcontext context = event. Getservletcontext(); </p><p><b

56、>  try {</b></p><p>  //使用輸入流:讀取配置文件里的各種參數(shù)Inputstream inputgetclasso. GetResourceAsstream("/ DBconfig. properties") ; ps. Ioad (input) 

57、; input. closeo ; url = (String) ps. Get("url") ; </p><p>  User = (String) ps. Get("use{') ; password = (St

58、ring) ps. Get("password") ;  DriverName = (string)ps. Get("DriverName") ; maxconnections = Integer.parselnt((( String) ps. Get("maxc

59、onnections")). Trim(),10);</p><p>  System. out. println (user) ; </p><p>  //循環(huán)加入取得的連接到vector中</p><p>  for (int i=0;i<maxconnections ; i++) &

60、lt;/p><p><b>  {</b></p><p>  //調(diào)用下面的方法,取得數(shù)據(jù)庫連接,并放入到Vector中</p><p>  connections. Add(getconnection( url, user, password, DriverName)) : </p><p><b>  }&l

61、t;/b></p><p><b>  }</b></p><p>  catch (Exception e) </p><p><b>  {</b></p><p>  e. printstackTrace() ; </p&

62、gt;<p><b>  }</b></p><p>  //放到服務(wù)器的上下文環(huán)境中</p><p>  context.setAttribute("CONNECTOR",new DBConnectionpool(connections)) ;</p><p><b>  }</b&

63、gt;</p><p>  連接池初始化參數(shù)通過頁面設(shè)置寫入DBconfig.propeties文件中,如</p><p><b>  下圖所示:</b></p><p><b>  4.2連接池的管理</b></p><p>  連接池管理策略是連接池機(jī)制的核心。當(dāng)連接池建立后,如何對(duì)連接池中的連

64、接進(jìn)行管理,解決好連接池內(nèi)連接的分配和釋放,對(duì)系統(tǒng)的性能有很大的影響。連接的合理分配,釋放可提高連接的復(fù)用,降低了系統(tǒng)建立新連接的開銷,同時(shí)也加速了用戶的訪問速度。下面介紹連接池中連接的分配,釋放策略。</p><p>  連接池的分配,釋放策略對(duì)于有效復(fù)用連接非常重要。就一般情況而言,當(dāng)客戶釋放數(shù)據(jù)庫連接時(shí),先判斷該連接的引用次數(shù)是否超過了規(guī)定值,如果超過就刪除該連接,并判斷當(dāng)前連接池內(nèi)總的連接數(shù)是否小于min

65、conn(最小連接數(shù)),若小于就將連接池充滿;如果沒超過就將該連接標(biāo)記為開放狀態(tài),可供再次復(fù)用??梢钥闯稣沁@套策略保證了數(shù)據(jù)庫連接的有效復(fù)用,避免頻繁地建立、釋放連接所帶來的系統(tǒng)資源開銷。我們采用的方法是一個(gè)很有名的設(shè)計(jì)模式:ReferenceCounting(引用記數(shù))。該模式在復(fù)用資源方面應(yīng)用的非常廣泛,把該方法運(yùn)用到對(duì)于連接的分配釋放上,為每一個(gè)數(shù)據(jù)庫連接,保留一個(gè)引用記數(shù),用來記錄該連接的使用者的個(gè)數(shù)。具體的實(shí)現(xiàn)方法是:

66、60; public synchronized Connection getconnection(int Timeout) { Connection con = null ;  if (freeconnections.Size() <= O) </p><p>  

67、{ System.out.println(”連接失敗,由于數(shù)據(jù)庫連接池中無可用連接!請(qǐng)等待!”);</p><p><b>  try { </b></p><p>  new DBConnection Managero. closeAll();  } catch (Exce

68、ption ex)  { ex. printstackTraceo ;  } return con ; </p><p><b>  }</b></p><p>  else {Connection temp = (Connectio

69、n) freeconnections.FirstElement(); freeConnections.remove(temp) ; nowConnections.add(temp) ; return temp ;  }</p><p>  } 當(dāng)應(yīng)用程序向數(shù)據(jù)庫發(fā)起連接請(qǐng)求時(shí),會(huì)檢查連接池中是否存在空閑

70、的連接。如果存在空閑的連接,連接池則把空閑連接分配給客戶,并將該連接做相應(yīng)處理,即標(biāo)記為正在使用的連接,并將引用計(jì)數(shù)加1。如果不存在空閑連接,則檢查連接池里的連接數(shù)是否已經(jīng)達(dá)到了最大連接數(shù)(maxconn),若沒有達(dá)到就為應(yīng)用程序創(chuàng)建一個(gè)新的誶榕;若達(dá)到了最大連接數(shù),么就需要等待連接的釋放,等待連接的釋放時(shí)間是由系統(tǒng)中預(yù)先定義好的一個(gè)超時(shí)參數(shù)(Timeout)來做判斷。如果在超時(shí)等待(Timeout)后仍沒有可用的空間連接工程序上便會(huì)

71、返回一個(gè)null值,同時(shí)拋出無空閑連接的異常給用戶。public void Timeout(int Timeout, Connection con) </p><p>  {try { Thread t = new Threado ; t.Start(); 

72、;t.Run(); t.wait(Timeout); closeconnection (con) ; t. Destroy(); </p><p><b>  }</b></p><p>  catch (Exception ex)  {</p>

73、<p>  ex. printstackTrace();</p><p><b>  }</b></p><p>  }  已用連接計(jì)數(shù)器的問題交由JSP 頁面中的循環(huán)來處理,每當(dāng)應(yīng)用程序申請(qǐng)一個(gè)連接時(shí),計(jì)數(shù)器便會(huì)循環(huán)一次,部分實(shí)現(xiàn)代碼如下:for (int = 0; i <cp.Get

74、Nowconnectionso.sizeo;i++) { out. println("<font color=blue> 連接名稱”+(i+1)+”:〈/font〉”+ cp.GetNowconnections().Get(i) + “<br>") ; con = (Conne

75、ction) cp. GetNowconnections().Get (0); }對(duì)于未用連接的處理與已用連接類似,部分實(shí)現(xiàn)代碼如下:for (int = cp.Getfreeconnections().size();j++) {</p><p>  out. println("<font 

76、cOlor=blue> 未 用連接名稱”+Li+1)+”:〈/font〉”+ cp.Getfreeconnections().Get(j) +“<br>") ; }連接池的調(diào)用如下圖所示,若連接已分配完畢,系統(tǒng)提示等待連接釋放。  4.3連接池的關(guān)閉 當(dāng)應(yīng)用程序退出時(shí),通過調(diào)用closeAll()方法來關(guān)閉連接池中的連接

77、</p><p>  ,此時(shí)應(yīng)把在連接池建立時(shí)向數(shù)據(jù)庫申請(qǐng)的連接對(duì)象統(tǒng)一歸還給數(shù)據(jù)庫(即關(guān)閉所有數(shù)據(jù)庫連接)。public void closeAllo { try  { if (rs != null) rs. closeo ;  if (smt 

78、!= null) smt. closeo ; </p><p>  if (psmt != null) psmt. closeo ; </p><p>  if(con ! = null)provider. closeconnect

79、ion (con) ; }catch (Exception e) {e. printstackTrace() ; }</p><p>  } 4.4連接池的測試 對(duì)于一個(gè)好的連接池,性能顯得尤為重要。性能不僅僅體現(xiàn)的是對(duì)數(shù)據(jù)庫操作的處理速度還有連接池自身的穩(wěn)定性。通過壓力測試,對(duì)比能夠看出DBCP

80、連接池要比Hibernate3.0 默認(rèn)自帶的數(shù)據(jù)庫連接池c3po快,但是穩(wěn)定性卻不如它,并發(fā)用戶過多常常會(huì)自動(dòng)斷開連接。通過對(duì)本連接池的測試發(fā)現(xiàn),有連接池的時(shí)候?qū)?shù)據(jù)庫的操作要比沒有連接池的時(shí)候快3-5秒。</p><p>  一般數(shù)據(jù)庫連接池采用DBCP作為連接池時(shí),默認(rèn)的初始化為50個(gè),速度不會(huì)有太大問題。正常情況下,系統(tǒng)沒問題,壓力測試從10個(gè)并發(fā)開始,每一次增量是增加10個(gè)并發(fā),至200-40

81、0并發(fā)用戶將成為一個(gè)重要節(jié)點(diǎn),性能的優(yōu)越能得以體現(xiàn)。而本連接池沒有經(jīng)過壓力測試,多用戶的并發(fā)訪問時(shí)其穩(wěn)定性還有待驗(yàn)證。 5系統(tǒng)測試問題總結(jié) 5.1連接池的泄露問題 5.1.1產(chǎn)生現(xiàn)象</p><p>  當(dāng)系統(tǒng)訪問量較大時(shí),會(huì)出現(xiàn)連接池連接數(shù)居高不下的情況,如果在關(guān)閉數(shù)據(jù)庫連接的過程中發(fā)生錯(cuò)誤會(huì)導(dǎo)致他們不再會(huì)被重用。這就叫做“數(shù)據(jù)庫連接池泄漏”。這將會(huì)最終導(dǎo)致web應(yīng)用程序數(shù)據(jù)庫連接失敗。甚至

82、造成連接池崩潰,從而無法進(jìn)行數(shù)據(jù)交互,服務(wù)器當(dāng)機(jī)。 5.1.2解決辦法 常見的程序錯(cuò)誤寫法有以下兩種 1.當(dāng)連接執(zhí)行數(shù)據(jù)庫操作出錯(cuò)時(shí),未執(zhí)行數(shù)據(jù)庫關(guān)閉。Connection conn = Dbutil.Getconnection(); //執(zhí)行數(shù)據(jù)庫操作Dbutil. Closeconnection();  在以上代碼中,如果執(zhí)行數(shù)據(jù)庫操作過程中,出現(xiàn)

83、異常,系統(tǒng)從出現(xiàn)異常處停止,不再執(zhí)行下面的代碼,造成數(shù)據(jù)庫連接池?zé)o法回收,連接泄露的情況。正確的代碼寫法應(yīng)如下:Try{</p><p>  Connection conn = Dbutil.Getconnection(); ;//執(zhí)行數(shù)據(jù)庫操作}catch(Excepti on e) {</p><p>  }finally{&

84、#160;Dbutil. Closeconnection(); //異常處理后必須處理的方法。</p><p>  } 這樣將保證了在執(zhí)行數(shù)據(jù)庫操作過程中即使出現(xiàn)異常,也將能夠執(zhí)行數(shù)據(jù)庫連接池的回收。2、在連接中嵌套數(shù)據(jù)庫連接,如下</p><p>  TryConnection conn = Dbutil. Getconnecti

85、on() ;doMethodA( )//執(zhí)行數(shù)據(jù)庫操作}catch(Exce ption e){}</p><p>  finally{Dbutil. Closeconnection() ;</p><p><b>  }</b></p><p>  Public

86、0;void doMethodAo{ //再次打開數(shù)據(jù)庫進(jìn)行操作} 在上面的例子中,當(dāng)調(diào)用方法doMethodA()時(shí),在方法內(nèi)部又打開了一個(gè)數(shù)據(jù)庫連接,這時(shí)造成同一線程中打開了兩個(gè)連接,如果不注意,很有可能就打開了更多的連接,以至于成為系統(tǒng)性能的瓶頸。 5.2多數(shù)據(jù)庫服務(wù)器問題 如今在一個(gè)應(yīng)用系統(tǒng)中,一般可能不只訪問一個(gè)數(shù)據(jù)庫,有時(shí)會(huì)訪問兩個(gè)或是多個(gè)數(shù)據(jù)庫,各個(gè)數(shù)據(jù)庫的數(shù)據(jù)必須融會(huì)到同

87、一個(gè)業(yè)務(wù)邏輯中,否則就成為一個(gè)個(gè)低價(jià)值的數(shù)據(jù)孤島,這時(shí)就需用到多數(shù)據(jù)源。在一個(gè)應(yīng)用系統(tǒng)中,一般會(huì)有一數(shù)據(jù)源應(yīng)用較多,其它數(shù)據(jù)源應(yīng)用較少,我們把應(yīng)用較多的數(shù)據(jù)源定義為主數(shù)據(jù)源,其它數(shù)據(jù)源定義為從數(shù)據(jù)源。我們?yōu)槊恳粋€(gè)數(shù)據(jù)源定義一個(gè)名稱,在應(yīng)用系統(tǒng)中根據(jù)該名稱定向到數(shù)據(jù)源。在應(yīng)用中,我們定義一個(gè)靜態(tài)Hashtable對(duì)數(shù)據(jù)源進(jìn)行保存。</p><p>  結(jié)論 通過本次課題的研究,可以看出在廣泛采用B/S結(jié)

88、構(gòu)的Web應(yīng)用程序中,并發(fā)訪問數(shù)據(jù)庫是一關(guān)鍵性問題。只有充分運(yùn)用連接池訪問技術(shù),才能提高數(shù)據(jù)庫的訪問效率,改善Web 應(yīng)用,從而減少系統(tǒng)開銷。在進(jìn) 行與數(shù)據(jù)庫有關(guān)的應(yīng)用開發(fā)中,數(shù)據(jù)庫連接的管理是一個(gè)重點(diǎn),也是一個(gè)難點(diǎn)。很多時(shí)候,連接的混亂管理所造成的系統(tǒng)資源開銷過大成為制約大型企業(yè)級(jí)應(yīng)用效率的瓶頸。對(duì)于眾多用戶訪問的Web應(yīng)用,采用數(shù)據(jù)庫連接技術(shù)的系統(tǒng)在效率和穩(wěn)定性上比采用傳統(tǒng)的其他方式的系統(tǒng)要好很多。

89、 本文采用了一些廣泛使用的設(shè)計(jì)模式(資源池,引用記數(shù)等),討論了基于連接池技術(shù)的數(shù)據(jù)庫連接管理的關(guān)鍵問題并給出了一個(gè)實(shí)現(xiàn)模型。這是連接池管理程序,提高系統(tǒng)的整體性能的一種基本模式。</p><p>  參考文獻(xiàn)[1】GregBarish【美】.J2EEWeb應(yīng)用高級(jí)編程[M].林琪,英宇譯.北京:清華大學(xué)出版社,2002。[2]畢利,畢茹,李光明.計(jì)算機(jī)系統(tǒng)應(yīng)用[M].北京:電子工業(yè)出版社,2004.

90、2</p><p>  [3]謝俊,陳明.Java數(shù)據(jù)庫連接池的研究與實(shí)現(xiàn)【M】.北京:科學(xué)出版社,2002.5。[4]黃汛工程治剛.數(shù)據(jù)庫連接池技術(shù)的應(yīng)用與研究[M].武漢:武漢大學(xué)出版社,2002.10。[5]肖捷,肖正新.基于Java的通用數(shù)據(jù)庫連接池組件的設(shè)計(jì)與實(shí)現(xiàn)[M] · 北京:電子工業(yè)出版社,2006。[6]張聰,王福川,劉啟元.計(jì)算機(jī)系統(tǒng)應(yīng)用[M].北京:

91、電子工業(yè)出版社,2001。[7]李昌一,宋中山‘基于Java的數(shù)據(jù)庫連接池設(shè)計(jì)與實(shí)現(xiàn)[M],合肥:安徽工業(yè)大學(xué)出版社,2004。</p><p><b>  ? 謝 辭</b></p><p>  轉(zhuǎn)眼間,畢業(yè)論文就要完成了,大學(xué)生涯也即將結(jié)束,我們馬上就要告別這個(gè)生活學(xué)習(xí)了四年的校園,告別那些尊敬的老師,告別那些親愛的同學(xué)與朋友。</p>&

92、lt;p>  在這里學(xué)習(xí)了四年,首先需要感謝的是在這四年中給予我們指導(dǎo)的老師。除了在做畢設(shè)過程中給予我很多幫助的肖模艷老師,還有許許多多傳授我們知識(shí),引導(dǎo)我們思考,開啟我們智慧的老師,他們?cè)谒哪甑倪^程中用他們的知識(shí)與智慧,用他們寬闊的胸襟與獨(dú)特的閱歷,來指引我們?nèi)フJ(rèn)識(shí),去感受這個(gè)世界。他們用最樸實(shí)無華的語言和最生動(dòng)形象的比喻來指引我們?nèi)ヌ剿髦R(shí)的殿堂。他們不僅是我們的老師,也是我們的朋友,他們會(huì)為我們的成功感到自豪,他們也會(huì)為我們

93、的失敗感到失落。他們一次次的用他們那種讓人感到溫暖的力量帶領(lǐng)我們?nèi)コ砷L,去釋放我們青春的活力。</p><p>  除了那些敬愛的老師,我還有那些親愛的同學(xué)和朋友需要感謝。我仍然可以清晰的記得同學(xué)們初次相逢的好奇與興奮。我們從祖國的四面八方走來,帶著不同的性格與人生經(jīng)歷,帶著我們各自的夢(mèng)想來到了這里,然后組成了一個(gè)集體。我們慢慢的去認(rèn)識(shí),慢慢的成為了朋友。我們可以坐在一起去尋找題目的答案,我們也可以在球場上揮灑我

94、們青春的汗水。我們還會(huì)在熄燈之后討論以后自己人生的規(guī)劃,也會(huì)討論今天看見了哪個(gè)漂亮的女生。這是一段多么令人難忘的經(jīng)歷??墒乾F(xiàn)在確到了分開的時(shí)候,這總是那么的令人不舍?;蛟S大家以后都很難再見一面,或許以后大家都會(huì)很少有聯(lián)系,但是大學(xué)生涯的經(jīng)歷是永遠(yuǎn)值得懷念的。</p><p>  當(dāng)然,還要感謝我最親愛的父母,父母的愛是最無私的愛。還要感謝我的小學(xué),初中,高中老師,還有許許多多在我成長的路上幫助過我的人。</

95、p><p><b>  參考文獻(xiàn)</b></p><p>  [1] Vanda Nahavandipoor.iOS 5 Programming Cookbook[M].O'ReillyMedia ,2012:1~200.</p><p>  [2] Objective-C程序設(shè)計(jì):第四版/(美)科昌(Kochan,S.G.)著;林冀,

96、范俊,朱奕欣譯.—北京:電子工業(yè)出版社,2012,9</p><p>  [3] iOS cocos2d 2 游戲開發(fā)實(shí)戰(zhàn)(第 3 版)/(美)伊特海姆(Itterheim, S. ),(德)勒夫(Löw, A. ) 著;同濟(jì)大學(xué)蘋果 俱樂部 譯. —北京:清華大學(xué)出版社,2013.5</p><p>  [4] Cocos2D-x 權(quán)威指南 / 滿碩泉著 . —北京:機(jī)械工

97、業(yè)出版社,2013.4</p><p>  [5] Mark Dalrymple,Scott Knaster.Objective-C基礎(chǔ)教程(高朝勤,楊越,劉霞 等)[M].北京:人民郵電出版社,2009:1~254.</p><p>  [6] Dave Mark,Jeff LaMarche.iphone3開發(fā)基礎(chǔ)教程(漆振,楊越,孫文磊 等)[M].北京:人民郵電出版社,2009:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論