案頭輕量級資料庫的選擇:Access、SQLite、自己編寫?

來源:互聯網
上載者:User

1. Access
我們做小項目的時候特別是小的MIS系統一般也都要用資料庫來儲存資料。經觀察大部分的小系統都是用Access資料庫,有的系統為了掩蓋資料庫的類型,把資料檔案尾碼名改了,其實只要改回到mdb,用Access開啟,資料一目瞭然,其實Access資料庫本身有很多的問題:效能不行;資料不安全,使用者可以直接用Access開啟資料庫檔案進行資料修改,即使加密後都可以直接破解;Access的資料量一大,檔案本身的體積就異常龐大;Access資料庫檔案很容易損壞,我做的一個系統由於意外斷電老是當掉,使用者的資料幾經摧毀。 為了彌補Access的缺陷,我曾經用MySQL資料庫代替,但MySQL是網路資料庫,安裝起來比較複雜。後來在用Python做項目的時候發現了SQLite,真是相見恨晚,SQLite就是Access理想的替代品啊!

2. SQLite
SQLite是一個小型的C程式庫,實現了獨立的,可嵌入的,零配置的SQL資料庫引擎。特性包括:

事務操作是原子,一致,孤立,並且持久的(ACID),即使在系統崩潰和電源故障之後。

零配置——不需要安裝和管理。

實現了絕大多數SQL92標準。

整個資料庫儲存在一個單一的檔案中。

資料庫檔案可以在不同位元組序的機器之間自由地共用。

支援最大可達2T的資料庫。 (241 位元組)

字串和BLOB類型的大小最大可達 2G 位元組(231位元組)。

小的代碼: 完整配置的少於250KB,忽略一些可選特性的少於150KB。

在大多數常見操作上比流行的客戶/伺服器資料庫引擎更快。

簡單,便於使用的API。

內建TCL綁定。 另外提供可用於許多其他語言的綁定。

具有良好注釋的原始碼,95%經過測試。

獨立:沒有外部依賴。

原始碼位於公用域。 可用於任何用途。

SQLite用的非常廣泛,Web應用也都在用它,PHP5都內建了SQLite的擴充,所以SQLite是案頭輕量級資料庫的首選。除了Access和SQLite外,還有Firebird等資料庫,我覺得SQLite足夠小系統使用了。但是SQLite是通用的資料庫系統,產生的資料庫檔案很容易用二進位編輯器開啟,開啟後檔案首部赫然就是“SQLite format 3”,這就暴露了我們的資料檔案是SQLite檔案,資料庫系統是SQLite,只要用SQLite工具開啟這個檔案就可以看到資料庫中的內容了。那為了私密性我們能做哪些工作呢?

3. SQLite定製
我們有時為了私密性,不想讓軟體使用者知道我們使用的資料庫系統可以採取不同的加密措施。Access資料庫可以設定密碼達到保護資料的目的,但是Access的密碼儲存在Access的資料庫檔案中,用工具可以很容易的取得資料庫的密碼,這樣我們的資料結構就很容易暴露給別人了。最安全的方法是我們自己編寫資料庫管理系統,這樣我們的資料存放區格式是私人的別人根本無法知道,這樣即使他能看到檔案中的位元據也沒有辦法直接看到資料模型的結構。但是,自己做一個資料庫管理系統雖然不是太難,無非是儲存管理,索引管理,SQL介面等,但如果沒有相應的開發經驗還是比較費時費力的,那我們能不能用“拿來主義”,用現成的資料庫管理系統改造成我們自己的資料庫管理系統呢?當然可以。就拿SQLite來說,它是全部開源的,可以從其網站上下載到最新的原始碼,然後把原始碼修改成我們自己的格式後進行編譯就可以了。這對於Linux下的使用者來說相當容易,但對於Windows下的不太用VC、BC的開發人員來說,配置編譯環境,設定匯出DLL等操作還是比較費事的,我們就用現成的編譯好的檔案來修改吧。

用現成編譯好的檔案進行修改需要二進位的編輯器,推薦使用Ultraedit。為了更好的示範,我們假設用我比較熟悉的Delphi進行開發,用Delphi來訪問SQLite可以採用兩種方式:一種是用ODBC,SQLite提供ODBC的驅動;另外一種採用ASQLite組件進行訪問,ASQLite是專門的封裝SQLite DLL的組件包,可以在http://www.sqlite.com.cn/Upfiles/source/ASQLite.rar下載。我們選用ASQLite,對於ODBC的方法與ASQLite的類似,我們分步驟完成。

下載SQLite,可以在http://www.sqlitecn.org/download.html下載,我們下載Windows版本的,裡面內建一個命令列工具用於建庫等資料庫操作。

下載ASQLite,並安裝到Delphi中。

開啟ASQLite的例子程式可以看到SQLite的示範,我們下面的修改以此例子程式為例。

ASQLite是sqlite3.dll的封裝,我們要修改的是資料庫檔案、sqlite3.dll和ASQLite三個地方。

修改資料庫檔案。

資料庫檔案名為SampleDB,用UltraEdit開啟此檔案,在最上面可以看到“SQLite format 3”的字樣,這是SQLite資料檔案的標識,我們只需要修改這部分就可以了,比如修改為“CrazyCom DBEN 6”,最好和原長度一樣,不一樣的後面一定要改為“00”(十六進位)。

修改sqlite3.dll。

修改完上面的資料庫檔案後,如果這時運行例子程式會出現資料格式不對的提示,所以對sqlite3.dll進行相應的修改。

1)修改檔案標識代碼

開啟sqlite3.dll,尋找“SQLite format 3”,找到後改為“CrazyCom DBEN 6”,這樣運行例子程式應該正常了。

2)修改函數匯出表

我們用DLL、Exe的查看工具如Depend可以看到DLL匯出了哪些函數,sqlite3.dll匯出的函數都以“sqlite3_”打頭的,這就暴露了我們使用的資料庫是SQLite了,所以需要修改為不太容易辨識的名字如“crazydb_”打頭。要修改首先要找到匯出表的位置,在UltraEdit中尋找“sqlite3_”,當看到很多字串都是以“sqlite3_”開始的時候就找到了,具體應該在0x39db8位移量處。這時如果運行例子程式,例子程式會報異常,因為它找不到相應的函數入口了,所以我們必須修改ASQLite的源檔案。

修改ASQLite。

ASQLite是對sqlite3.dll的組件化封裝,所有的調用還是通過sqlite3.dll實現的,既然我們修改了sqlite3.dll的匯出函數介面,我們必須修改ASQLite中和sqlite3.dll的介面部分。介面檔案就是ASGSQLite3.pas,開啟此檔案,找到TASQLite3DB.LoadLibs函數,看到了吧,這個函數載入sqlite3.dll,並找到各個函數。我們只需要修改各個函數的名稱就可以了。當然要和sqlite3.dll的匯出函數名稱對應。

修改完後重新安裝ASQLite。

重新編譯例子程式,運行正常。到此已經基本完成了修改工作。

修改DLL名稱。

由於SQLite的DLL名稱是sqlite3.dll,很容易讓人猜到是SQLite,我們可以把DLL的名字改掉,具體改什麼名字可以隨意,比如我們改為crazycomdb.dll。改完後要在例子程式中進行對應的修改,即設定TASQLite3DB的DriverDLL = 'crazycomdb.dll'。

4. 總結
本文給出了案頭輕量資料庫的選擇建議,比較了Access、SQLite兩種資料庫管理系統,並對定製SQLite資料庫管理系統、增強其私密性、安全性提供了詳細的步驟,給出了在Delphi下進行SQLite應用的具體例子。沒有給出ODBC驅動的相關討論,不過可以依據本文的方法類比進行。

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/kernelspirit/archive/2007/03/07/1523061.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.