桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案_第1頁(yè)
桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案_第2頁(yè)
桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案_第3頁(yè)
桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案_第4頁(yè)
桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案桌面日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案摘要自上個(gè)世紀(jì)以來(lái),隨著電腦的逐漸普及,人們的工作和生活越來(lái)越方便和快捷,也使得越來(lái)越多的人依賴于電腦辦公。而傳統(tǒng)的日程記事本逐漸顯現(xiàn)出在當(dāng)今時(shí)代的不足和局限性。比如:不便攜帶,不便查閱,不能自動(dòng)提醒等等,電腦桌面日歷由此孕育而生。很快,桌面日歷就以其方便的日期查詢,個(gè)性化的日程安排,精確地鬧鐘提醒和人性化的日志系統(tǒng),美觀的界面設(shè)計(jì)受到廣大辦公人士的追捧。本設(shè)計(jì)就是針對(duì)當(dāng)前網(wǎng)絡(luò)上眾多的桌面日歷,綜合國(guó)內(nèi)外日歷系統(tǒng)以及各項(xiàng)基本功能來(lái)開(kāi)發(fā)的屬于用戶私人的個(gè)性桌面日歷系統(tǒng)。本設(shè)計(jì)主要采用C#語(yǔ)言+sqlite的設(shè)計(jì)模式,將日歷和日志集成到一款

2、軟件上,來(lái)實(shí)現(xiàn)用的添加日志,設(shè)置私密日志,鬧鐘提醒以及個(gè)性的鈴聲設(shè)置等功能,既在最大程度上保護(hù)了用戶的隱私,又給用戶提供了方便快捷的體驗(yàn),使得用戶準(zhǔn)確掌握每日的日程安排。本設(shè)計(jì)按照功能模塊分為查看日志,添加日志,鬧鐘提醒和設(shè)置四個(gè)模塊。本文詳細(xì)介紹了該日歷系統(tǒng)的功能需求,系統(tǒng)設(shè)置和具體實(shí)現(xiàn)。并且簡(jiǎn)要介紹了該系統(tǒng)開(kāi)發(fā)采用的過(guò)程及方法。關(guān)鍵詞 :桌面日歷;日程;多用戶;Design and Development of Desktop Calendar SystemAbstractAs PC becomes more and more popular since last century, peo

3、ples work and lifebecome more and more convenient, and people rely increasingly on computers.However, the conventional notepad has revealed its deficiencies and limitations, suchas inconvenience. And conventional notepad can not alarm automatically also. So, the desktop calendar appears. Because of

4、its convenient date inquiry, individualized schedule management system, accurate schedule alarm system and friendly user interface, desktop calendar is highly estimated among computer workers.Combining the functions of a number of todays desktop calendars, this design aims to develop an individual d

5、esktop calendar and schedule system. It is developed by C# and SQL, based on C/S. Its functions include “multi-user login”, “schedule management”, “schedule alarm”, “date inquiry”, “holiday management”and so on.The calendar is convenient for users to check the schedule everyday, and also canprotect

6、each users private information.The calendar includes “user login”module, “user registry and edition” module, “date and time” module, “holiday manage” module, “schedule manage” module, “schedule alarm”module and “database”module. This article describes the functional requirement, system design and de

7、tail implementation. It also describes the methods and development process of this system in brief.Key words: Desktop Calendar;Schedule;Multiple Userii目錄摘要IIIAbstractii1 緒論11.1 課題研究的目的及意義11.2 桌面日歷的發(fā)展?fàn)顩r12 相關(guān)理論基礎(chǔ)22.1 C#22.1.1 C#簡(jiǎn)介22.1.2 C#的優(yōu)點(diǎn)32.1.3 C#的缺點(diǎn)42.1.4 C#的與語(yǔ)言結(jié)構(gòu)52.1.5 C#的程序執(zhí)行82.1.6 C#的歷史發(fā)展82.2

8、SQLite介紹92.2.1 SQLite簡(jiǎn)介92.2.2 SQLite的特點(diǎn)92.2.3 使用.net操作SQLite102.2.4 使用SQLite的注意事項(xiàng)112.2.5 SQLite的語(yǔ)言綁定122.2.6 SQLite的客戶端管理132.2.7 SQLite的類型143 系統(tǒng)需求分析153.1 用戶需求153.2 功能需求153.3 性能需求164 桌面日歷的系統(tǒng)功能實(shí)現(xiàn)174.1 查看日記模塊174.2 添加日志模塊184.3. 鬧鐘提醒模塊245 系統(tǒng)測(cè)試275.1 主要功能的驗(yàn)證275.2 密碼的安全性檢驗(yàn)325.3 日志信息的安全性檢驗(yàn)325.4 數(shù)據(jù)庫(kù)的安全性336 結(jié)論3

9、4參考文獻(xiàn)35致謝36外文文獻(xiàn)3711 緒論1.1 課題研究的目的及意義隨著信息時(shí)代的到來(lái),手機(jī),電腦等新生代的通信設(shè)備成了通信領(lǐng)域的主力軍。并且隨著手機(jī)和電腦的普及,最終成為通信的主導(dǎo)工具。根據(jù)國(guó)家統(tǒng)計(jì)局的統(tǒng)計(jì),至2010年7月,中國(guó)的網(wǎng)名數(shù)量超過(guò)4.2億,手機(jī)網(wǎng)民數(shù)量達(dá)到2.77億。這將意味著我國(guó)有超過(guò)4.2億的人民正在享受電子時(shí)代所帶來(lái)的方便和快捷。對(duì)于大多數(shù)網(wǎng)民而言,手機(jī),電腦已經(jīng)成為他們生活中不可或缺的一部分,讓他們花更多的時(shí)間和金錢(qián)去購(gòu)買(mǎi)和使用非電子版的日歷,這顯然是不實(shí)際的。桌面日歷系統(tǒng)的誕生也是必然的。本軟件所要設(shè)計(jì)的是一款集傳統(tǒng)日歷功能和日志功能于一身的個(gè)性化的桌面日歷系統(tǒng)。

10、同時(shí)增加提醒,記事,備忘,存儲(chǔ),密碼設(shè)置等常用功能,真正意義上實(shí)現(xiàn)便捷,有效,實(shí)時(shí)的查找信息,了解信息。1.2 桌面日歷的發(fā)展?fàn)顩r 日歷軟件真正的誕生源于WINDOWS系統(tǒng)的開(kāi)發(fā)。日歷軟件是WINDOWS系統(tǒng)的自帶軟件,主要是方便用戶了解時(shí)間而附加上去的。但是,作為WINDOWS系統(tǒng)開(kāi)發(fā)者的主要力量西方人,以他們的對(duì)事物的了解方式所做出來(lái)的軟件并非被所有中國(guó)的網(wǎng)民所認(rèn)同。對(duì)深受中國(guó)文化深深影響的中國(guó)網(wǎng)民來(lái)說(shuō),使用這種日歷軟件并沒(méi)有帶來(lái)什么方便,因?yàn)樵谥袊?guó)人的日常生活中還有一部日歷農(nóng)歷。一些有預(yù)見(jiàn)的軟件公司找到了商機(jī),開(kāi)發(fā)了諸多的只面向中國(guó)網(wǎng)民的桌面日歷備忘管理軟件。伴隨著科學(xué)技術(shù)的日新月異,桌

11、面日歷備忘管理軟件得到了長(zhǎng)足的發(fā)展,并正在不斷地更新、完善,同時(shí),出現(xiàn)的問(wèn)題也愈加明顯。由于軟件公司在利益的趨勢(shì)與業(yè)內(nèi)強(qiáng)大的競(jìng)爭(zhēng)的壓迫下,軟件公司為所開(kāi)發(fā)的軟件能夠獲得更多的用戶使用,在所開(kāi)發(fā)的桌面日歷備忘管理軟件中捆綁了大量的其他功能軟件,例如股市信息、網(wǎng)絡(luò)電視、游戲等,使得一個(gè)本該短小簡(jiǎn)單的軟件變成了一個(gè)捆綁了大量功能的“變形金剛”。就我熟悉的八戒桌面工具,其中包含了各種硬件的監(jiān)測(cè)信息、計(jì)算器、證券信息、基金信息、網(wǎng)絡(luò)廣播、網(wǎng)絡(luò)電視、電子字典、各種版本的天氣預(yù)報(bào)等49個(gè)功能部件,其功能之強(qiáng)大與齊全讓人望塵莫及。實(shí)際上,大多數(shù)的網(wǎng)民根本就不需要這么多的功能軟件。即使有部分網(wǎng)民需要使用這些軟件

12、,也必然會(huì)選擇使用更加專業(yè)的軟件,而不會(huì)用這些看似強(qiáng)大,但又不專業(yè)的功能軟件。當(dāng)網(wǎng)民們只想使用一個(gè)純粹的桌面日歷備忘錄軟件時(shí),確又不得不使用那些“變形金剛”,這是多么苦惱的事情。所以開(kāi)發(fā)一款純粹的桌面日歷備忘管理軟件存在其開(kāi)發(fā)的價(jià)值的。2 相關(guān)理論基礎(chǔ)2.1 C#2.1.1 C#簡(jiǎn)介C#讀作C Sharp。最初它有個(gè)更酷的名字,叫做COOL。微軟從1998年12月開(kāi)始了COOL項(xiàng)目,直到2000年2月,COOL被正式更名為C#。在1998年,Delphi語(yǔ)言的設(shè)計(jì)者Hejlsberg帶領(lǐng)著Microsoft公司的開(kāi)發(fā)團(tuán)隊(duì),開(kāi)始了第一個(gè)版本C#語(yǔ)言的設(shè)計(jì)。在2000年9月,國(guó)際信息和通信系統(tǒng)標(biāo)準(zhǔn)

13、化組織為C#語(yǔ)言定義了一個(gè)Microsoft公司建議的標(biāo)準(zhǔn)。最終C#語(yǔ)言在2001年得以正式發(fā)布。在過(guò)去的二十年里,C 和C+已經(jīng)成為在商業(yè)軟件的開(kāi)發(fā)領(lǐng)域中使用最廣泛的語(yǔ)言。它們?yōu)槌绦騿T提供了十分靈活的操作,不過(guò)同時(shí)也犧牲了一定的效率。許多程序員都試圖尋找一種新的語(yǔ)言。希望能在功能與效率之間找到一個(gè)更為理想的通過(guò)權(quán)衡點(diǎn)。對(duì)于C/C+用戶來(lái)說(shuō),最理想的解決方案無(wú)疑是在快速開(kāi)發(fā)的同時(shí)又可以調(diào)用底層平臺(tái)的所有功能。C#是由微軟開(kāi)發(fā)的一種全新的、面向?qū)ο蟮木幊陶Z(yǔ)言。作為Visual Studio中的一部分推出。既保持了C+中熟悉的語(yǔ)法,并且還包含了大量的高效代碼和面向?qū)ο筇匦浴#使得C+程序員可以高

14、效的開(kāi)發(fā)程序,而絕不損失C/C+原有的強(qiáng)大的功能。因?yàn)檫@種繼承關(guān)系,C#與C/C+具有極大的相似性,熟悉類似語(yǔ)言的開(kāi)發(fā)者可以很快的轉(zhuǎn)向C#。C#語(yǔ)言將在保持C/C+靈活性的基礎(chǔ)上為程序員帶來(lái)更高效的RAD 開(kāi)發(fā)方GUI 界面。它不僅能用于WEB 服務(wù)程序的開(kāi)發(fā),并且還能開(kāi)發(fā)強(qiáng)大的系統(tǒng)級(jí)程序。微軟稱C#是由C 和C+派生而來(lái)的一種“簡(jiǎn)單、流行、面向?qū)ο蟆㈩愋桶踩钡某绦蛟O(shè)計(jì)語(yǔ)言C#意在綜合Visual Basic 的高效率和C+的強(qiáng)大功能。事實(shí)上,C#將是完全依靠Windows 的最完美產(chǎn)物。那些困繞Java SDK, MFC和SET 的數(shù)據(jù)庫(kù)已成為過(guò)去。你想放入C#的任何東西,(無(wú)論何種語(yǔ)言)

15、只要在Windows 的.NET 子系統(tǒng)下建立和包裝后都可以使用Windows 的運(yùn)行庫(kù)。C#是一種安全的、穩(wěn)定的、簡(jiǎn)單的、優(yōu)雅的,由C和C+衍生出來(lái)的面向?qū)ο蟮木幊陶Z(yǔ)言。它在繼承C和C+強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性(例如沒(méi)有宏以及不允許多重繼承)。C#綜合了VB簡(jiǎn)單的可視化操作和C+的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語(yǔ)法風(fēng)格、創(chuàng)新的語(yǔ)言特性和便捷的面向組件編程的支持成為.NET開(kāi)發(fā)的首選語(yǔ)言。C#是面向?qū)ο蟮木幊陶Z(yǔ)言。它使得程序員可以快速地編寫(xiě)各種基于MICROSOFT .NET平臺(tái)的應(yīng)用程序,MICROSOFT .NET提供了一系列的工具和服務(wù)來(lái)最大程度地開(kāi)發(fā)利用計(jì)算與通訊

16、領(lǐng)域。正是由于C#面向?qū)ο蟮淖吭皆O(shè)計(jì),使它成為構(gòu)建各類組件的理想之選無(wú)論是高級(jí)的商業(yè)對(duì)象還是系統(tǒng)級(jí)的應(yīng)用程序。使用簡(jiǎn)單的C#語(yǔ)言結(jié)構(gòu),這些組件可以方便的轉(zhuǎn)化為XML網(wǎng)絡(luò)服務(wù),從而使它們可以由任何語(yǔ)言在任何操作系統(tǒng)上通過(guò)INTERNET進(jìn)行調(diào)用。C#使得C+程序員可以高效的開(kāi)發(fā)程序,且因可調(diào)用由 C/C+ 編寫(xiě)的本機(jī)原生函數(shù),因此絕不損失C/C+原有的強(qiáng)大的功能。因?yàn)檫@種繼承關(guān)系,C#與C/C+具有極大的相似性,熟悉類似語(yǔ)言的開(kāi)發(fā)者可以很快的轉(zhuǎn)向C#。2.1.2 C#的優(yōu)點(diǎn)C#在帶來(lái)對(duì)應(yīng)用程序的快速開(kāi)發(fā)能力的同時(shí),并沒(méi)有犧牲C與C+程序員所關(guān)心的各種特性。它忠實(shí)地繼承了C和C+的優(yōu)點(diǎn)。如果你對(duì)C

17、或C+有所了解,你會(huì)發(fā)現(xiàn)它是那樣的熟悉。即使你是一位新手,C#也不會(huì)給你帶來(lái)任何其它的麻煩,快速應(yīng)用程序開(kāi)發(fā)(Rapid Application Development,RAD)的思想與簡(jiǎn)潔的語(yǔ)法將會(huì)使你迅速成為一名熟練的開(kāi)發(fā)人員。C#是專門(mén)為.NET應(yīng)用而開(kāi)發(fā)出的語(yǔ)言。這從根本上保證了C#與.NET框架的完美結(jié)合。在.NET運(yùn)行庫(kù)的支持下,.NET框架的各種優(yōu)點(diǎn)在C#中表現(xiàn)得淋漓盡致。概括來(lái)講,C#的優(yōu)點(diǎn)有:第一,簡(jiǎn)潔的語(yǔ)法。在缺省的情況下,C#的代碼在.NET框架提供的“可操縱”環(huán)境下運(yùn)行,不允許直接地內(nèi)存操作。它所帶來(lái)的最大的特色是沒(méi)有了指針。與此相關(guān)的是,那些在C+中被瘋狂使用的操作符

18、(例如:“:”、“-”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個(gè)“.”,對(duì)于我們來(lái)說(shuō),現(xiàn)在需要理解的一切僅僅是名字的嵌套而已。C#用真正的關(guān)鍵字換掉了那些把活動(dòng)模板庫(kù)(Active Template Library,ALT)和COM搞得亂糟糟的偽關(guān)鍵字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.NET類庫(kù)中都有了新名字。第二,精心的面向?qū)ο笤O(shè)計(jì)。C#具有面向?qū)ο蟮恼Z(yǔ)言所應(yīng)有的一切特性:封裝、繼承與多態(tài)性,這并不出奇。然而,通過(guò)精心地面向?qū)ο笤O(shè)計(jì),從高級(jí)商業(yè)對(duì)象到系統(tǒng)級(jí)應(yīng)用,C#建造廣泛組件的絕對(duì)選擇。在C#的類型系統(tǒng)中,每種類型都可

19、以看作一個(gè)對(duì)象。C#提供了一個(gè)叫做裝箱(boxing)與拆箱(unboxing)的機(jī)制來(lái)完成這種操作,而不給使用者帶來(lái)麻煩。C#只允許單繼承,即一個(gè)類不會(huì)有多個(gè)基類,從而避免了類型定義的混亂。在后面的學(xué)習(xí)中你很快會(huì)發(fā)現(xiàn),C#中沒(méi)有了全局函數(shù),沒(méi)有了全局變量,也沒(méi)有了全局常數(shù)。一切的一切,都必須封裝在一個(gè)類之中。你的代碼將具有更好的可讀性,并且減少了發(fā)生命名沖突的可能。整個(gè)C#的類模型是建立在.NET虛擬對(duì)象系統(tǒng)(Visual Object System,VOS)的基礎(chǔ)之上,其對(duì)象模型是.NET基礎(chǔ)架構(gòu)的一部分,而不再是其本身的組成部分。C#具備了良好的開(kāi)發(fā)環(huán)境。結(jié)合自身強(qiáng)大的面向?qū)ο蠊δ?,C#

20、使得開(kāi)發(fā)人員的生產(chǎn)效率得到極大的提高。對(duì)于公司而言,軟件開(kāi)發(fā)周期的縮短將能使它們更好應(yīng)付網(wǎng)絡(luò)經(jīng)濟(jì)的競(jìng)爭(zhēng)。在功能與效率的杠桿上人們終于找到了支點(diǎn)。第三,完整的安全性和錯(cuò)誤處理。語(yǔ)言的安全性與錯(cuò)誤處理能力,是衡量一種語(yǔ)言是否優(yōu)秀的重要依據(jù)。任何人都會(huì)犯錯(cuò)誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對(duì)不屬于自己管理范圍的內(nèi)存空間進(jìn)行修改,.。這些錯(cuò)誤常常產(chǎn)生難以預(yù)見(jiàn)的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡(jiǎn)單錯(cuò)誤的代價(jià)將會(huì)是讓人無(wú)法承受的。C#的先進(jìn)設(shè)計(jì)思想可以消除軟件開(kāi)發(fā)中的許多常見(jiàn)錯(cuò)誤,并提供了包括類型安全在內(nèi)的完整的安全性能。為了減少開(kāi)發(fā)中的錯(cuò)誤,C#會(huì)幫助開(kāi)發(fā)者通過(guò)更少的代碼

21、完成相同的功能,這不但減輕了編程人員的工作量,同時(shí)更有效地避免了錯(cuò)誤的發(fā)生。第四,靈活性和安全性。在簡(jiǎn)化語(yǔ)法的同時(shí),C#并沒(méi)有失去靈活性。盡管它不是一種無(wú)限制語(yǔ)言,比如:它不能用來(lái)開(kāi)發(fā)硬件驅(qū)動(dòng)程序,在默認(rèn)的狀態(tài)下沒(méi)有指針等等,但是,在學(xué)習(xí)過(guò)程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來(lái),你將能夠使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組,并且調(diào)用這些非安全代碼不會(huì)帶來(lái)任何其它的問(wèn)題。此外,它還提供了一個(gè)另外的東西(這樣的稱呼多少有些不敬)來(lái)模擬指針的功能-delegates,代表。再舉一個(gè)例子:C#不支持類的多繼承,但是通過(guò)對(duì)接口的繼承,你將獲得這一功能。

22、正是由于其靈活性,C#允許與C風(fēng)格的需要傳遞指針型參數(shù)的API進(jìn)行交互操作,DLL的任何入口點(diǎn)都可以在程序中進(jìn)行訪問(wèn)。C#遵守.NET公用語(yǔ)言規(guī)范(Common Language Specification,CLS),從而保證了C#組件與其它語(yǔ)言組件間的互操作性。元數(shù)據(jù)(Metadata)概念的引入既保證了兼容性,又實(shí)現(xiàn)了類型安全。2.1.3 C#的缺點(diǎn)首先,在大量的現(xiàn)有Windows 平臺(tái)上,C# 的程序還不能運(yùn)行,因?yàn)镃# 程序需要 .NET 運(yùn)行庫(kù)為基礎(chǔ),而 .NET 運(yùn)行庫(kù)將作為新一代的Windows(Whistler)的一部分發(fā)行,或以Service Pack 的形式提交給Windo

23、ws Me 和 Windows 2000用戶。所以在近期,C# 會(huì)主要在服務(wù)器上得到應(yīng)用。其次,C# 能夠使用的組件和庫(kù)還只有 .NET 運(yùn)行庫(kù)等很少的選擇,沒(méi)有豐富的第三方軟件庫(kù)可用,這需要有一個(gè)過(guò)程同時(shí)各軟件開(kāi)發(fā)商的支持也很重要。第三,JAVA 的成功因素里有一些是反微軟陣營(yíng)的吹捧,雖然“只寫(xiě)一次,到處運(yùn)行”只是一句口號(hào),但畢竟已經(jīng)是一種成熟的技術(shù)。而C# 的鼓吹者目前只有名聲不佳的微軟,且只能運(yùn)行在Windows 上。實(shí)際上這兩種語(yǔ)言都不是不可替代的,理智的說(shuō),對(duì)軟件開(kāi)發(fā)商而言,什么工具用的最熟,那就是最好的工具。尤其對(duì)C+的使用者C# 沒(méi)有帶來(lái)任何新東西,因?yàn)?NET 運(yùn)行庫(kù)在C+中也

24、可以使用,沒(méi)有要換的絕對(duì)的理由。 作為微軟的產(chǎn)品,它不能幫助競(jìng)爭(zhēng)者-其它操作系統(tǒng)。作為微軟的產(chǎn)品,它必須追求穩(wěn)定、嚴(yán)謹(jǐn),而不要出現(xiàn)任何錯(cuò)誤。C#團(tuán)隊(duì)實(shí)力確實(shí)非常強(qiáng)大,導(dǎo)致C#不會(huì)出現(xiàn)任何一個(gè)低級(jí)錯(cuò)誤,就連 if(a = false) 這樣的代碼都會(huì)出現(xiàn)一個(gè)警告。C#的語(yǔ)法、底層庫(kù)也無(wú)時(shí)不刻在印證一個(gè)理念:我們做的是產(chǎn)品,我們必須保證產(chǎn)品根據(jù)我們所期望的工作,而不允許出現(xiàn)任何錯(cuò)誤。這是一個(gè)優(yōu)點(diǎn),也是一個(gè)缺點(diǎn)。當(dāng)我們的需求和產(chǎn)品設(shè)計(jì)者所期望的一致時(shí),事情會(huì)變的非常輕松。但如果需求和期望不同時(shí),麻煩事情會(huì)接踵而至。 舉個(gè)例子,當(dāng)我們希望switch能夠貫穿case時(shí),就會(huì)出現(xiàn)麻煩-產(chǎn)品設(shè)計(jì)者不允許用

25、戶直接這么做-雖然他有合適的理由,也提供了實(shí)現(xiàn)這個(gè)功能的替代方法,但用戶必須按他說(shuō)的做。如果這種情況發(fā)生在其它產(chǎn)品設(shè)計(jì)者未考慮到的需求時(shí),那么這個(gè)麻煩將會(huì)更大。比如當(dāng)我們想要重載來(lái)模擬C+代碼時(shí),就會(huì)發(fā)現(xiàn)這是一個(gè)不可能的任務(wù)。很多人都有這種感受,直接使用IDE自帶的功能開(kāi)發(fā),做起來(lái)非常輕松。但一旦有一種自主的想法時(shí),就很難實(shí)現(xiàn)-比如修改軟件主題。在C#中,文檔注釋需求書(shū)寫(xiě)xml,但是文檔注釋卻是不能繼承的-用戶必須手動(dòng)為每個(gè)函數(shù)和重載添加注釋。C#的很多常用的工具類因?yàn)槠涫褂玫木窒扌裕ㄈ绮锁B(niǎo)用了就會(huì)出錯(cuò))而不被公開(kāi)。典型的例子如下:public string GetValue(int inde

26、x) if(index this.Count) throw new ArgumentOutOfromRangeException(); return GetValueInternal(index);internal string GetValueInternal(int index) /.C#把用戶當(dāng)成傻子-GetValue 會(huì)傳遞一個(gè)非法的index,然后自己則使用更高效的GetValueInternal 。C#系統(tǒng)庫(kù)的設(shè)計(jì)通過(guò)對(duì) index 檢測(cè),來(lái)確保拋出的是一個(gè)符合意義的異常。那用戶怎么辦?如果在項(xiàng)目中,不檢測(cè) index 是否合法,則顯得不嚴(yán)謹(jǐn),代碼質(zhì)量低(不檢查 index,會(huì)導(dǎo)致

27、 index 錯(cuò)誤時(shí)將出現(xiàn) IndexOfRangeException,而不是 ArgumentOutOfRangeException,這會(huì)讓第三方用戶迷惑:到底應(yīng)該捕獲哪個(gè)異常)。而檢測(cè)則是在浪費(fèi)代碼量,一個(gè)函數(shù)尚且如此,一個(gè)項(xiàng)目可見(jiàn)一斑。此外,用戶經(jīng)常需要使用一個(gè)類來(lái)實(shí)現(xiàn)功能,但其實(shí)這個(gè)類在系統(tǒng)庫(kù)中是存在的,但由于它只是一個(gè)內(nèi)部使用的功能模塊所以不是 public 。這時(shí)用戶只好另起爐灶。這也不難解釋為了明明有 Buffer.Copy 這個(gè)方法,系統(tǒng)內(nèi)部卻只會(huì)調(diào)用 Buffer.CopyInternal(不是public的) 而不是 Buffer.Copy ,而 Buffer.CopyIn

28、ternal 卻是用戶真正所需要的函數(shù)??傮w看,C#不適合做項(xiàng)目。它是一個(gè)很大的坑,因?yàn)樗鼤?huì)通過(guò)各種方式消耗用戶的時(shí)間。特別是追求完美的人,想要緊跟微軟的節(jié)奏創(chuàng)造完美,那簡(jiǎn)直是在拿時(shí)間開(kāi)玩笑。而對(duì)于僅僅想做完項(xiàng)目的人,也會(huì)越做越煩:明明簡(jiǎn)單的事情要搞這么復(fù)雜。即使如此,C#終究也只是一個(gè)語(yǔ)言,一個(gè)工具。客觀評(píng)價(jià)一個(gè)工具的好壞沒(méi)有實(shí)際意義,關(guān)鍵看用戶能否熟練使用,并且揚(yáng)長(zhǎng)避短。沒(méi)有最好的語(yǔ)言,但有最適合自己的語(yǔ)言。2.1.4 C#的與語(yǔ)言結(jié)構(gòu)類:在C#中類的聲明與C+和Java很相似。但是,不象C+,C#結(jié)構(gòu)體與類是不支持繼承。但是,與Java相同的是,一個(gè)結(jié)構(gòu)體可以實(shí)現(xiàn)接口(interface

29、)。Java的關(guān)鍵字import已經(jīng)被替換成using,它起到了同樣的作用。類可以是抽象的和不可繼承的:一個(gè)被申明成abstract的類不能被實(shí)例化,它只能被用做一個(gè)基類,C#關(guān)鍵字lock就像Java關(guān)鍵字final,它申明一個(gè)類不是抽象的,但是它也不能被用做另一個(gè)類的基類界面:就象在Java中一樣,一個(gè)界面是一組方法集合的抽象定義。當(dāng)一個(gè)類或結(jié)構(gòu)體實(shí)現(xiàn)一個(gè)界面的時(shí)候,它必須實(shí)現(xiàn)這個(gè)界面中定義的所有方法。一個(gè)單一的類可以實(shí)現(xiàn)幾個(gè)界面,也許以后會(huì)出現(xiàn)一些微妙的差別,但是這個(gè)特點(diǎn)看起來(lái)與Java相比沒(méi)有變化。在Java中,一個(gè)接口是一組方法集合的抽象定義.當(dāng)一個(gè)類或結(jié)構(gòu)體實(shí)現(xiàn)一個(gè)接口的時(shí)候,它必

30、須實(shí)現(xiàn)這個(gè)接口中定義的所有方法.一個(gè)單一的類可以實(shí)現(xiàn)幾個(gè)接口.也許以后會(huì)出現(xiàn)一些微妙的差別,但是這個(gè)特點(diǎn)看起來(lái)與Java相比沒(méi)有變化。布爾運(yùn)算:條件表達(dá)式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語(yǔ)言中獨(dú)立的一種數(shù)據(jù)類型.從布爾類型到其他類型沒(méi)有直接的轉(zhuǎn)換過(guò)程.布爾常量true和false是C#中的關(guān)鍵字.錯(cuò)誤處理:如Java中那樣,通過(guò)拋出和捕捉異常對(duì)象來(lái)管理錯(cuò)誤處理過(guò)程.內(nèi)存管理:由底層.NET框架進(jìn)行自動(dòng)內(nèi)存垃圾回收。布爾運(yùn)算:條件表達(dá)式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語(yǔ)言中獨(dú)立的一種數(shù)據(jù)類型,從布爾類型到其他類型沒(méi)有直接的轉(zhuǎn)換過(guò)程,布爾常量true和false是C#中的關(guān)鍵字。錯(cuò)

31、誤處理:如Java中那樣,通過(guò)拋出和捕捉異常對(duì)象來(lái)管理錯(cuò)誤處理過(guò)程。內(nèi)存管理:由底層.NET框架進(jìn)行自動(dòng)內(nèi)存垃圾回收。一個(gè)基本的C#類中包含數(shù)據(jù)成員、屬性、構(gòu)造器和方法。屬性可以是靜態(tài)或?qū)嵗蓡T。接口:是其他類型為確保它們支持某些操作而實(shí)現(xiàn)的引用類型。接口從不直接創(chuàng)建而且沒(méi)有實(shí)際的表示形式,其他類型必須轉(zhuǎn)換為接口類型。一個(gè)接口定義一個(gè)協(xié)定。實(shí)現(xiàn)接口的類或結(jié)構(gòu)必須遵守其協(xié)定。接口可以包含方法、屬性、索引器和事件作為成員。強(qiáng)類型:C#是一個(gè)強(qiáng)類型的語(yǔ)言,它的數(shù)值類型有一些可以進(jìn)行隱式轉(zhuǎn)換,其他的必須顯式轉(zhuǎn)換,隱式轉(zhuǎn)換的類型只能是長(zhǎng)度短的類型轉(zhuǎn)換成長(zhǎng)的類型,int可以轉(zhuǎn)換成long、float、do

32、uble、decimal,反之必須顯式的轉(zhuǎn)換。編譯:程序直接編譯成標(biāo)準(zhǔn)的二進(jìn)制可執(zhí)行形式.但C#的源程序并不是被編譯成二進(jìn)制可執(zhí)行形式,而是一種中間語(yǔ)言(IL),類似于JAVA字節(jié)碼。如果前面的Hello World程序被保存成一個(gè)c#與權(quán)威指南教程文本文件并被命名為Hello.cs,它將被編譯成命名Hello.exe的可執(zhí)行程序。C#程序不能直接編譯成標(biāo)準(zhǔn)的二進(jìn)制可執(zhí)行形式,與Java類似,它被編譯成為中間代碼(Microsoft Intermediate Language),然后通過(guò) .NET Framework 的虛擬機(jī)被稱之為通用語(yǔ)言執(zhí)行層(Common Language Runtim

33、e, CLR)執(zhí)行。一個(gè)C#的結(jié)構(gòu)體與C+的結(jié)構(gòu)體是相似的,因?yàn)樗軌虬瑪?shù)據(jù)聲明和方法.但是,不象C+,C#結(jié)構(gòu)體與類是不同的而且不支持繼承.但是,與Java相同的是,一個(gè)結(jié)構(gòu)體可以實(shí)現(xiàn)接口。預(yù)編譯:C# 中存在預(yù)編譯指令支持條件編譯,警告,錯(cuò)誤報(bào)告和編譯行控制.可用的預(yù)編譯指令有:#define,#undef,#if,#elif,#else,#endif,#warning,#error,#line。沒(méi)有了#include偽指令,無(wú)法再用#define 語(yǔ)句對(duì)符號(hào)賦值,所以就不存在源代碼替換的概念-這些符號(hào)只能用在#if和#elif偽指令里.在#line偽指令里的數(shù)字(和可選的名字)能夠修改

34、行號(hào)還有#warning和#error輸出結(jié)果的文件名。操作符重載:一些操作符能夠被重載,而另一些則不能.特別的是,沒(méi)有一個(gè)賦值運(yùn)算符能夠被重載.能夠被重載的單目操作符是:+ - ! + - true false能夠被重載的二元運(yùn)算符是:+、 - 、*、 /、 %、 &、 |、 、 、 =、 !=、 、 = 、=。類型:C# 中的類型一共分為兩類,一類是值類型(Value Type),一類是引用類型(Reference Type)。值類型和引用類型是以它們?cè)谟?jì)算機(jī)內(nèi)存中是如何被分配的來(lái)劃分的。值類型包括 結(jié)構(gòu)和枚舉,引用類型包括類、接口、委托 等。還有一種特殊的值類型,稱為簡(jiǎn)單類型(Simpl

35、e Type),比如 byte,int等,這些簡(jiǎn)單類型實(shí)際上是FCL類庫(kù)類型的別名,比如聲明一個(gè)int類型,實(shí)際上是聲明一個(gè)System. Int32結(jié)構(gòu)類型。因此,在 Int32類型中定義的操作,都可以應(yīng)用在int類型上,比如 “123.Equals(2)”。所有的值類型都隱式地繼承自System.ValueType類型(注意System.ValueType本身是一個(gè)類類型),System.ValueType和所有的引用類型都繼承自 System.Object基類。不能顯式地讓結(jié)構(gòu)繼承一個(gè)類,因?yàn)镃#不支持多重繼承,而結(jié)構(gòu)已經(jīng)隱式繼承自ValueType。NOTE:堆棧(stack)是一種后

36、進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中,變量會(huì)被分配在堆棧上來(lái)進(jìn)行操作。堆(heap)是用于為類型實(shí)例(對(duì)象)分配空間的內(nèi)存區(qū)域,在堆上創(chuàng)建一個(gè)對(duì)象,會(huì)將對(duì)象的地址傳給堆棧上的變量(反過(guò)來(lái)叫變量指向此對(duì)象,或者變量引用此對(duì)象)。中間代碼:微軟在用戶選擇何時(shí)MSIL應(yīng)該編譯成機(jī)器碼的時(shí)候是留了很大的余地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機(jī)器碼.它也明白許多-如果不是大多數(shù)的話-程序員認(rèn)為Java程序要不可避免的比C編寫(xiě)的任何東西都要慢.而這種實(shí)現(xiàn)方式?jīng)Q定了基于MSIL的程序(指的是用C#,Visual Basic,Managed C+-C+的一個(gè)符合CLS的版本-等語(yǔ)言編寫(xiě)的程序)將

37、在性能上超過(guò)解釋性的Java代碼.當(dāng)然,這一點(diǎn)還需要得到事實(shí)證明,因?yàn)镃#和其他生成MSIL的編譯器還沒(méi)有發(fā)布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對(duì)相同.象C#是編譯語(yǔ)言而Java是解釋性的,之類的聲明只是商業(yè)技巧.Java的中間代碼和MSIL都是中間的匯編形式的語(yǔ)言,它們?cè)谶\(yùn)行時(shí)或其它的時(shí)候被編譯成機(jī)器代碼?;緮?shù)據(jù)類型:C#擁有比C/C+或者Java更廣泛的數(shù)據(jù)類型.這些類型是bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一樣,所有這些類型都有一個(gè)固定的大小

38、.又像C和C+一樣,每個(gè)數(shù)據(jù)類型都有有符號(hào)和無(wú)符號(hào)兩種類型.與Java相同的是,一個(gè)字符變量包含的是一個(gè)16位的Unicode字符,C#新的數(shù)據(jù)類型是decimal數(shù)據(jù)類型,對(duì)于貨幣數(shù)據(jù),它能存放28位10進(jìn)制數(shù)字。兩個(gè)基本類:一個(gè)名叫object的類是所有其他類的基類。而一個(gè)名叫string的類也象object一樣是這個(gè)語(yǔ)言的一部分.作為語(yǔ)言的一部分存在意味著編譯器有可能使用它,無(wú)論何時(shí)在程序中寫(xiě)入一句帶引號(hào)的字符串,編譯器會(huì)創(chuàng)建一個(gè)string對(duì)象來(lái)保存它。參數(shù)傳遞:方法可以被聲明接受可變數(shù)目的參數(shù).缺省的參數(shù)傳遞方法是對(duì)基本數(shù)據(jù)類型進(jìn)行值傳遞。ref關(guān)鍵字可以用來(lái)強(qiáng)迫一個(gè)變量通過(guò)引用傳遞

39、,這使得一個(gè)變量可以接受一個(gè)返回值。out關(guān)鍵字也能聲明引用傳遞過(guò)程,與ref不同的地方是,它指明這個(gè)參數(shù)并不需要初始值。COM的集成:C#對(duì)Windows程序最大的賣點(diǎn)可能就是它與COM的無(wú)縫集成了,COM就是微軟的Win32組件技術(shù).實(shí)際上,最終有可能在任何.NET語(yǔ)言里編寫(xiě)COM客戶和服務(wù)器端。C#編寫(xiě)的類可以子類化一個(gè)已存在的COM組件;生成的類也能被作為一個(gè)COM組件使用,然后又能使用,比方說(shuō),JScript語(yǔ)言子類化它從而得到第三個(gè)COM組件。這種現(xiàn)象的結(jié)果是導(dǎo)致了一個(gè)運(yùn)行環(huán)境的產(chǎn)生,在這個(gè)環(huán)境里的組件是網(wǎng)絡(luò)服務(wù),可用任何.NET語(yǔ)言子類化。索引下標(biāo):一個(gè)索引與屬性除了不使用屬性名

40、來(lái)引用類成員而是用一個(gè)方括號(hào)中的數(shù)字來(lái)匿名引用(就象用數(shù)組下標(biāo)一樣)以外是相似的。代理和反饋:一個(gè)代理對(duì)象包括了訪問(wèn)一個(gè)特定對(duì)象的特定方法所需的信息.只要把它當(dāng)成一個(gè)聰明的方法指針就行了。代理對(duì)象可以被移動(dòng)到另一個(gè)地方,然后可以通過(guò)訪問(wèn)它來(lái)對(duì)已存在的方法進(jìn)行類型安全的調(diào)用.一個(gè)反饋方法是代理的特例.event關(guān)鍵字用在將在事件發(fā)生的時(shí)候被當(dāng)成代理調(diào)用的方法聲明中。2.1.5 C#的程序執(zhí)行C#所開(kāi)發(fā)的程序源代碼并不是編譯成能夠直接在操作系統(tǒng)上執(zhí)行的二進(jìn)制本地代碼。與Java類似,它被編譯成為中間代碼,然后通過(guò).NET Framework的虛擬機(jī)被稱之為通用語(yǔ)言運(yùn)行時(shí)(CLR)執(zhí)行。所有的.Ne

41、t編程語(yǔ)言都被編譯成這種被稱為MSIL(Microsoft Intermediate Language )的中間代碼。因此雖然最終的程序在表面上仍然與傳統(tǒng)意義上的可執(zhí)行文件都具有“.exe”的后綴名。但是實(shí)際上,如果計(jì)算機(jī)上沒(méi)有安裝.Net Framework,那么這些程序?qū)⒉荒軌虮粓?zhí)行。在程序執(zhí)行時(shí),.Net Framework將中間代碼翻譯成為二進(jìn)制機(jī)器碼,從而使它得到正確的運(yùn)行。最終的二進(jìn)制代碼被存儲(chǔ)在一個(gè)緩沖區(qū)中。所以一旦程序使用了相同的代碼,那么將會(huì)調(diào)用緩沖區(qū)中的版本。這樣如果一個(gè).Net程序第二次被運(yùn)行,那么這種翻譯不需要進(jìn)行第二次,速度明顯加快。2.1.6 C#的歷史發(fā)展C#是微

42、軟公司在2000年6月發(fā)布的一種新的編程語(yǔ)言,主要由安德斯海爾斯伯格(Anders Hejlsberg)主持開(kāi)發(fā),它是第一個(gè)面向組件的編程語(yǔ)言,其源碼會(huì)編譯成msil再運(yùn)行。它借鑒了Delphi的一個(gè)特點(diǎn),與COM(組件對(duì)象模型)是直接集成的,并且新增了許多功能及語(yǔ)法糖,而且它是微軟公司.NET windows網(wǎng)絡(luò)框架的主角。C#讀作C Sharp。最初它有個(gè)更酷的名字,叫做COOL。微軟從1998年12月開(kāi)始了COOL項(xiàng)目,直到2000年2月,COOL被正式更名為C#。在1998年,Delphi語(yǔ)言的設(shè)計(jì)者Hejlsberg帶領(lǐng)著Microsoft公司的開(kāi)發(fā)團(tuán)隊(duì),開(kāi)始了第一個(gè)版本C#語(yǔ)言的設(shè)

43、計(jì)。在2000年9月,國(guó)際信息和通信系統(tǒng)標(biāo)準(zhǔn)化組織為C#語(yǔ)言定義了一個(gè)Microsoft公司建議的標(biāo)準(zhǔn)。最終C#語(yǔ)言在2001年得以正式發(fā)布。原Broland公司的首席研發(fā)設(shè)計(jì)師安德斯海爾斯伯格(Anders Hejlsberg)在微軟開(kāi)發(fā)了Visual J+ 1.0,很快的Visual J+由1.1版本升級(jí)到6.0版。SUN公司認(rèn)為Visual J+ 違反了Java開(kāi)發(fā)平臺(tái)的中立性,對(duì)微軟提出了訴訟。2000年6月26日微軟在奧蘭多舉行的“職業(yè)開(kāi)發(fā)人員技術(shù)大會(huì)”(PDC 2000)上,發(fā)表新的語(yǔ)言C#。C#語(yǔ)言取代了Visual J+,語(yǔ)言本身深受 Java、C 和 C+ 的影響。C#是兼顧

44、系統(tǒng)開(kāi)發(fā)和應(yīng)用開(kāi)發(fā)的最佳實(shí)用語(yǔ)言,并且很有可能成為編程語(yǔ)言歷史上的第一個(gè)“全能”型語(yǔ)言。看過(guò)這篇簡(jiǎn)史,不要把C#看成年輕后生了只要是“馬拉多納”,就早晚當(dāng)“球王”。C#1.0,純粹的面向?qū)ο蟆?998年底,微軟正在忙于新一代COM的設(shè)計(jì)工作,COM一直是組件化開(kāi)發(fā)中非常成功的一種技術(shù);但由于它僅提供了二進(jìn)制層面上的統(tǒng)一,因此無(wú)法將類型信息和用于支持基礎(chǔ)平臺(tái)和開(kāi)發(fā)工具的信息放到組件中,Java逐步走向成熟。微軟學(xué)習(xí)Java的做法,將虛擬機(jī)的概念引入到了COM領(lǐng)域;同時(shí),微軟提出了“元數(shù)據(jù)”的概念,用于描述組件的類型信息和工具支持信息,并決定將其放入到組件當(dāng)中。1998年12月,微軟啟動(dòng)了一個(gè)全新

45、的語(yǔ)言項(xiàng)目COOL,這是一款專門(mén)為CLR設(shè)計(jì)的純面向?qū)ο蟮恼Z(yǔ)言,也正是本文的主角C#的前身。1999年7月份,微軟完成了COOL語(yǔ)言的一個(gè)內(nèi)部版本。2000年2月份,微軟才正式將COOL語(yǔ)言更名為C#。據(jù)說(shuō)起這個(gè)名字是因?yàn)镃#開(kāi)發(fā)小組的人很討厭搜索引擎,因此把大部分搜索引擎無(wú)法識(shí)別的“#”字符作為該語(yǔ)言名字的一部分;還有一種說(shuō)法是在音樂(lè)當(dāng)中“#”是升調(diào)記號(hào),表達(dá)了微軟希望它在C的基礎(chǔ)上更上一層樓的美好愿望當(dāng)然這些都只是傳說(shuō),無(wú)從考證。又是歷經(jīng)了一系列的修改,微軟終于在2000年7月發(fā)布了C#語(yǔ)言的第一個(gè)預(yù)覽版。2.2 SQLite介紹2.2.1 SQLite簡(jiǎn)介 SQLite,是一款輕型的數(shù)據(jù)

46、庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月。 至今已經(jīng)有14個(gè)年頭,SQLite也迎來(lái)了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。不像常見(jiàn)的客戶-服務(wù)器范例,SQLi

47、te引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語(yǔ)言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(kù)(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡(jiǎn)單的設(shè)計(jì)是通過(guò)在開(kāi)始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。不像常見(jiàn)的客戶-服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語(yǔ)言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(kù)(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文

48、件中。它的簡(jiǎn)單的設(shè)計(jì)是通過(guò)在開(kāi)始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。2.2.2 SQLite的特點(diǎn)SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù)。既然號(hào)稱關(guān)系型數(shù)據(jù)庫(kù),支持SQL92標(biāo)準(zhǔn)大多數(shù)標(biāo)準(zhǔn)(比如視圖、事務(wù)、觸發(fā)器等)。QLite和C/S模式的數(shù)據(jù)庫(kù)軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫(kù)引擎,因此不存在數(shù)據(jù)庫(kù)的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個(gè)動(dòng)態(tài)庫(kù),就可以使用它的全部功能。而且那個(gè)動(dòng)態(tài)庫(kù)的尺寸也挺小,以版本3.6.11為例,Windows下487KB、Linux下347KB。SQLite的另外一個(gè)特點(diǎn)是綠色:它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝”。所以

49、在部署的時(shí)候能夠省去不少麻煩。 SQLite在使用前不需要安裝設(shè)置,不需要進(jìn)程來(lái)啟動(dòng)、停止或配置,不需要管理員去創(chuàng)建新數(shù)據(jù)庫(kù)或分配用戶權(quán)限,在系統(tǒng)崩潰或失電之后自動(dòng)恢復(fù)。 大多數(shù)SQL數(shù)據(jù)庫(kù)引擎是作為一個(gè)單獨(dú)的服務(wù)器進(jìn)程被執(zhí)行。訪問(wèn)數(shù)據(jù)庫(kù)的程序使用某種內(nèi)部進(jìn)程通信(典型的是TCPIP)與服務(wù)器通信,完成 發(fā)送請(qǐng)求到服務(wù)器和接收查詢結(jié)果的工作。SQLite不采用這種工作方式。使用SQLite時(shí),訪問(wèn)數(shù)據(jù)庫(kù)的程序直接從磁盤(pán)上的數(shù)據(jù)庫(kù)文件讀寫(xiě),沒(méi)有中間 的服務(wù)器進(jìn)程。所謂的“單一文件”,就是數(shù)據(jù)庫(kù)中所有的信息(比如表、視圖、觸發(fā)器、等)都包含在一個(gè)文件內(nèi)。這個(gè)文件可以copy到其它目錄或其它機(jī)器上,

50、也照用不誤。 一個(gè)SQLite數(shù)據(jù)庫(kù)是一個(gè)單獨(dú)的普通磁盤(pán)文件,能夠被定位在路徑層次的任何地方。如果 SQLite能讀寫(xiě)磁盤(pán)文件,則它也能訪問(wèn)數(shù)據(jù)庫(kù)。大多數(shù)SOL數(shù)據(jù)庫(kù)引擎趨向于把數(shù)據(jù)存為一個(gè)大的文件集合,通常這些文件在一個(gè)標(biāo)準(zhǔn)的定位中,只有數(shù)據(jù) 庫(kù)引擎本身能訪問(wèn)它。SQLite雖然很小巧,但是支持的SQL語(yǔ)句不會(huì)遜色于其他開(kāi)源數(shù)據(jù)庫(kù),它支持的SQL包括:ATTACH DATABASE,BEGIN TRANSACTION,Comment,COMMIT TRANSACTION,COPY,CREATE INDEX,CREATE TABLE,CREATE TRIGGER,CREATE VIEW,DEL

51、ETE,DETACH DATABASE,DROP INDEX,DROP TABLE,DROPTRIGGER,DROP VIEW,END TRANSACTION,EXPLAIN,Expression,INSERT,ON CONFLICT clause,PRAGMA,REPLACE,ROLLBACK TRANSACTION,SELECT,UPDATE。同時(shí)它還支持事務(wù)處理功能等等。也有人說(shuō)它象Microsoft的Access,有時(shí)候真的覺(jué)得有點(diǎn)象,但是事實(shí)上它們區(qū)別很大。比如SQLite 支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語(yǔ)言直接創(chuàng)建數(shù)據(jù)庫(kù),而不象Access一樣需要Office的支持。如果你是個(gè)

52、很小型的應(yīng)用,或者你想做嵌入式開(kāi)發(fā),沒(méi)有合適的數(shù)據(jù)庫(kù)系統(tǒng),那么你可以考慮使用SQLite。它的特性包括1). ACID事務(wù)。2). 零配置 無(wú)需安裝和管理配置。3).儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù)。4).數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享。5).支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。6). 足夠小, 大致13萬(wàn)行C代碼, 4.43M。7). 比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快。8). 簡(jiǎn)單, 輕松的API。9). 包含TCL綁定, 同時(shí)通過(guò)Wrapper支持其他語(yǔ)言的綁定。10). 良好注釋的源代碼, 并且有著90%以上的測(cè)試覆蓋率。11). 獨(dú)立: 沒(méi)有額外依賴。12). 源

53、碼完全的開(kāi)源, 你可以用于任何用途, 包括出售它。13). 支持多種開(kāi)發(fā)語(yǔ)言,C, PHP, Perl, Java, C#,Python, Ruby。2.2.3 使用.net操作SQLite先下載ADO.NET2.0 Provider for SQLite。下載binaries zip版就可以了。下載完后解壓縮,可以在bin目錄下找到System.Data.SQLite.DLL。在vs2008中用Add Reference功能把System.Data.SQLite.DLL加到工程里就可以了。運(yùn)行下面代碼試試:string datasource = e:/tmp/test.db;System.D

54、ata.SQLite.SQLiteConnection.CreateFile(datasource);/連接數(shù)據(jù)庫(kù)System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection();System.Data.SQLite.SQLiteConnectionStringBuilder connstr = new System.Data.SQLite.SQLiteConnectionStringBuilder();connstr.DataSource = datasource;connstr.Pass

55、word = admin;/設(shè)置密碼,SQLite ADO.NET實(shí)現(xiàn)了數(shù)據(jù)庫(kù)密碼保護(hù)conn.ConnectionString = connstr.ToString();conn.Open();/創(chuàng)建表System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();string sql = CREATE TABLE test(username varchar(20),password varchar(20);cmd.CommandText = sql;cmd.Connection = conn;cmd

56、.ExecuteNonQuery();/插入數(shù)據(jù)sql = INSERT INTO test VALUES(a,b);cmd.CommandText = sql;cmd.ExecuteNonQuery();/取出數(shù)據(jù)sql = SELECT * FROM test;cmd.CommandText = sql;System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();StringBuilder sb = new StringBuilder();while (reader.Read()sb.Append(username:).Append(reader.GetString(0).Append(n).Append(password:).Append(reader.GetString(1);MessageBox.Show(sb.ToString();2.2.4 使用SQLite的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論