多样化实现Windows Phone 7本地数据访问3——DB4O
終于把這篇文章發(fā)出來(lái)了. 對(duì)于Windows Phone 7 Visit Local DataBase新采用DB4O和SiaqoDB方式來(lái)驗(yàn)證 本地?cái)?shù)據(jù)訪問(wèn). 其實(shí)這篇已經(jīng)在上周 完成一個(gè)大概草稿. 中間再CodePlex看到一個(gè)Dvp寫(xiě)的一段關(guān)于Perst數(shù)據(jù)庫(kù)使用心得 回過(guò)頭一看又覺(jué)得自己寫(xiě)的有些關(guān)于SiaqoDB細(xì)節(jié)上有失嚴(yán)謹(jǐn).?于是乎又不斷查看多方資料來(lái)反復(fù)利用實(shí)際編程的方式來(lái)驗(yàn)證. 可惜的是這方面資料基本沒(méi)有,對(duì)于某些想法只能動(dòng)手嘗試 ok let’s get start!……
關(guān)于Windows Phone 7 本地?cái)?shù)據(jù)庫(kù)訪問(wèn)的選擇 JackLin 已經(jīng)完整的總結(jié)了一篇文章淺談Windows Phone 7本地?cái)?shù)據(jù)庫(kù)的選擇. 而今天我的工作就是驗(yàn)證他在這文章中提出的DB4O和SiaqoDB兩種訪問(wèn)方式. 至于文中提到的EffiProz Database/Windows Phone DataBase/Sqlite for Windows Phone 7 三種方式已經(jīng)前兩篇完整驗(yàn)證. 可以參考.
對(duì)于這個(gè)DB40, 我也是很偶爾中看到. 起初對(duì)于這個(gè)純開(kāi)源的面向?qū)ο蟮臄?shù)據(jù)引擎 沒(méi)有太過(guò)重視. 關(guān)于WP7本地?cái)?shù)據(jù)訪問(wèn)我先測(cè)試SQlite和Effoproze . 但是使用完DB4O不得不說(shuō)它本身特點(diǎn)相比其他開(kāi)源數(shù)據(jù)庫(kù)非常突出:
A:在官方[DB4O WebSite]的宣傳語(yǔ)中就說(shuō)到We are Free. DB4O的完全靠的開(kāi)源社區(qū)的驅(qū)動(dòng)力量來(lái)進(jìn)行開(kāi)發(fā). 意味它是免費(fèi)的.
B:原生數(shù)據(jù)庫(kù): 為什么說(shuō)是原生.db4o 是 100% 原生的面向?qū)ο髷?shù)據(jù)庫(kù),直接使用編程語(yǔ)言來(lái)操作數(shù)據(jù)庫(kù)。程序員無(wú)需進(jìn)行?OR?映射來(lái)存儲(chǔ)對(duì)象,大大節(jié)省了程序員在存儲(chǔ)數(shù)據(jù)的開(kāi)發(fā)時(shí)間, 這讓我想到Rails框架中ORM映射和.NET從java翻版過(guò)來(lái)的Nhibernate. 想想我們以前做OO編程時(shí) 把一個(gè)面向?qū)ο蟮念?lèi)存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中 總是難以避免走到這一步.
ORM層將數(shù)據(jù)庫(kù)表映射到類(lèi), 將表中記錄映射成一個(gè)實(shí)例對(duì)象. 將字段映射成對(duì)象的屬性.類(lèi)方法則對(duì)應(yīng)做的是表級(jí)別的操作, 實(shí)例方法則用于執(zhí)行對(duì)單條記錄的操作. 這樣直接對(duì)OO 操作的數(shù)據(jù)持久化操作 業(yè)界對(duì)Nhibernate性能上擔(dān)憂(yōu) 但DB4O 在性能上如何?
C:高性能: db4o 官方公布的基準(zhǔn)測(cè)試數(shù)據(jù),db4o 比采用 Hibernate/MySQL?方案在某些測(cè)試線路上速度高出 44 倍之多. 更多相關(guān)測(cè)試請(qǐng)參考官方[DB4O WebSite]文檔.
D:易簽入.使用 db4o 僅需引入 400 多 k 的?jar?文件或是?dll?文件,內(nèi)存消耗極小 無(wú)需管理 而且跨平臺(tái).
大概介紹DB40特點(diǎn) 下面快速進(jìn)度WP7開(kāi)發(fā)去體驗(yàn)一番.
在進(jìn)行DB40 For Windows pheon 7開(kāi)發(fā)前需要下載DB4O開(kāi)源組件:
下載地址.NEt 3.5版本:DB40 Download Link[DB4O 7.12 For .NEt 3.5]
下載完成后自動(dòng)安裝. 會(huì)在系統(tǒng)C盤(pán)符上生成一個(gè)目錄. ok let’s Create new WP7 Application For Test:
<2.1>添加引用
測(cè)試項(xiàng)目TestDB4OLocalDemo 創(chuàng)建完成后 需要添加引用, 找到DB4O默認(rèn)安裝目錄:
C:\Program Files\db4o\db4o-7.12\bin\net-3.5
下添加Db4objects.Db4o.DLL和Db4objects.Db4o.Linq.DLL引用:
引用結(jié)果:
添加引用完成后后臺(tái)頁(yè)面引入:
為了達(dá)到演示目的 將先在WP7界面實(shí)現(xiàn)DB4O數(shù)據(jù)庫(kù)基本的CRUD操作, 這時(shí)我們需要一個(gè)操作實(shí)體對(duì)象Customer類(lèi) 定義如下:
WP7界面我們先初始化數(shù)據(jù),然后根據(jù)CustmerName屬性查詢(xún)數(shù)據(jù), 刪除操作則對(duì)應(yīng)CustomerID來(lái)刪除,演示界面:
來(lái)看一下后臺(tái)文件關(guān)于DB4O數(shù)據(jù)庫(kù)初始化時(shí)插入數(shù)據(jù)具體操作,當(dāng)開(kāi)始第一次運(yùn)行時(shí) 提示一個(gè)異常信息:
提示的意思是我們目前的.NET版本不對(duì).?注意目前DB4O數(shù)據(jù)在官方中下載文件對(duì)應(yīng).NEt兩個(gè)版本.2.0和3.5 這是7.12版本,所以在建立WP7時(shí)把默認(rèn)的.NET 4.0更改為3.5 , 如果當(dāng)修改WP7.NEt版本為對(duì)應(yīng)的版本后依然提出這個(gè)問(wèn)題.這個(gè)問(wèn)題困擾我好一陣終于在WeAsk-上找到類(lèi)似問(wèn)題 來(lái)看一下我打開(kāi)一個(gè)DB4O數(shù)據(jù)庫(kù)文件的操作代碼:
這個(gè)問(wèn)題困擾我好一陣.后來(lái)在Weask上問(wèn)了Grouper 當(dāng)我們通過(guò)OpenFile自動(dòng)創(chuàng)建一個(gè)固定路徑上的DB4O文件,DB4O對(duì)于.NET版本的嵌入式開(kāi)發(fā)需要特殊的配置.Db4oEmbedded.NewConfiguration()實(shí)現(xiàn)的是?IEmbeddedConfiguration接口.而IEmbeddedConfiguration接口包含了在嵌入式模式下具體配置的方法.所以在NewConfiguation()需要配置Config中適用的范圍即ConfigScope.
問(wèn)題依然存在. 執(zhí)行到Db4oEmbedded.NewConfiguration()時(shí)依然會(huì)提示一個(gè)同樣的.NET版本異常. 這個(gè)問(wèn)題困擾我一個(gè)上午.看一下按鈕事件中完整代碼:當(dāng)初始化數(shù)據(jù)時(shí)通過(guò)后臺(tái)添加3條記錄并查詢(xún)DB4O中數(shù)據(jù)記錄數(shù)量是否為 3 判斷插入數(shù)據(jù)是否成功 代碼如下:
目前遇到問(wèn)題是WP7 引用DB4O后在Windows Phone 7 Application中提示一個(gè).NET FrameWork版本異常?始終無(wú)法解決.
經(jīng)過(guò)一番很費(fèi)力的查找在官方開(kāi)發(fā)者論壇同樣有人遇到這樣的問(wèn)題.?.NEt FrameWork Version Problem???但是他是在進(jìn)行AND移動(dòng)程序和Desklop桌面程序數(shù)據(jù)進(jìn)行同步時(shí).
在DB4O官方對(duì)開(kāi)發(fā)者對(duì)應(yīng)下載頁(yè)面:?[Developer Download Link]?對(duì)DB4O存在多個(gè)下載版本:
可下載適用DB4O多個(gè)版本[只看.NEt支持]:
DB40 For .NET 2.0/3.5 Version:7.12.156
DB40 For .NET 2.0/3.5 Version:7.4.155
DB40 For .NET 2.0/3.5/4.0 Version:8.0.156
大概查看一下Version 8.0之間 的Realse Note: 查看最新的Release Notes 8.0.156:
COR-1339?- Check db4o against latest Silverlight SDK
等于說(shuō)在最新的支持.NEt 4.0的DB4O 8.0中對(duì)Silverlight支持. 我們?cè)賮?lái)查看相關(guān)個(gè)DB40關(guān)于Silverlight和Windows Phone支持詳細(xì)文檔:
[db4o - Silverlight based RIA datastore]
[db4o - Windows Phone database]
DB4O對(duì)Windows Phone支持中明確提到:
| .NET 4.0 support and Silverlight version db4o now supports .NET 4.0 and has been ported to Silverlight! In order to get it you just need to download the .NET installer. |
DB4O現(xiàn)在已經(jīng)支持.NEt 4.0版本 這樣一來(lái)基本目前所有的.NEt版本DB4O都已經(jīng)支持. 不過(guò)對(duì)Silverlight最新版本支持正在開(kāi)發(fā). 目前DB4O對(duì)Silverlight支持版本為Silverlight 3. DB4O可以免費(fèi)使用在任何的Windows Phone 設(shè)備程序中. 那應(yīng)該我們對(duì)應(yīng)支持版本有問(wèn)題 下載最新的DB4O8.0 版本[需要注冊(cè)]:
[DB40 Last Version 8.0 Download link db4o for .NET 4.0, version 8.0.160.14822 ZIP]
在DB4O官方注冊(cè)用戶(hù)有一個(gè)很怪現(xiàn)象 只要你的機(jī)器裝了.NEt 4.0 在提交用戶(hù)信息后始終會(huì)提示一個(gè)運(yùn)行時(shí)異常 :
導(dǎo)致無(wú)法 注冊(cè) 后來(lái)我通過(guò)一個(gè)同事在java開(kāi)發(fā)環(huán)境注冊(cè)成功.
下載完成后 打開(kāi)Bin目錄可以看到其中已經(jīng)集成對(duì)Silverlight 3支持:
重新建立一個(gè)WP7 Application 選擇的.NET版本為.NET 4.0 引用DB4O版本為8.0 其他均不做修改 運(yùn)行提示如下:
調(diào)用Db4oEmbedded.NewConfiguration()時(shí) 無(wú)法找到NewConfiguartion()方法 或提示嘗試訪問(wèn)該方法調(diào)用失敗.
天啊 DB4O真是如此的折磨人!.我分別用了不同.NEt版本來(lái)測(cè)試同一個(gè)DB4O版本 結(jié)果還是無(wú)功而返. 我順便產(chǎn)看官方給出演示Demo實(shí)例. 可惜沒(méi)有關(guān)于Windows Phone 7的相關(guān)Demo. 從剛開(kāi)始提示.NET版本問(wèn)題到現(xiàn)在NewConfiguation()方法無(wú)法訪問(wèn). 希望碰到相關(guān)問(wèn)題或是對(duì)DB4O基于WP7本地?cái)?shù)據(jù)訪問(wèn)已經(jīng)成功案例 能夠共享出來(lái).
很遺憾 我利用假期又做了其他版本的嘗試 結(jié)果還是一樣. 關(guān)于DB4O在Windows Phone 7上的本地?cái)?shù)據(jù)訪問(wèn) 測(cè)試失敗.
DB4O在WP7我測(cè)試訪問(wèn)本地?cái)?shù)據(jù)沒(méi)有成功.官方明確提示是對(duì)Windows mobile 6.0/6.5都是支持的. 當(dāng)然在DB4O相對(duì)其他開(kāi)源第三方的數(shù)據(jù) 很有特點(diǎn). 現(xiàn)在已經(jīng)有很多企業(yè)把DB4O作為開(kāi)發(fā)的底層數(shù)據(jù)交互對(duì)象來(lái)進(jìn)行考慮. 關(guān)于這個(gè)WP7問(wèn)題 我們一直無(wú)法解決. 當(dāng)然不是說(shuō)沒(méi)有替代方法. 可以在WP7程序建立一個(gè)數(shù)據(jù)服務(wù)層用.NET類(lèi)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)DB4O訪問(wèn) 然后留用WCF服務(wù)的方式對(duì)外發(fā)布訪問(wèn)接口 在由WP7引用服務(wù)即可訪問(wèn). 如果哪位有更好的方法方式來(lái)解決這個(gè)問(wèn)題. 請(qǐng)?jiān)诹粞灾刑岢觥?/p>
參考資料:
DB4O 7.0 中文參考指南[Java版本文檔 有教程] 對(duì)照翻譯版
WeAsk-DB4O use in Windows Phone
Silverlighti and DB4O UserFrom
DataBase in WindowsPhone
本文轉(zhuǎn)自chenkaiunion 51CTO博客,原文鏈接:http://blog.51cto.com/chenkai/764484
總結(jié)
以上是生活随笔為你收集整理的多样化实现Windows Phone 7本地数据访问3——DB4O的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小班美术优质课教案《五彩花》反思
- 下一篇: 手牵手我们一起走的说说183个