摘要:利用數(shù)據(jù)庫的大字段存儲(chǔ)功能,通過數(shù)據(jù)庫下載文件實(shí)現(xiàn)客戶端軟件的自動(dòng)更新。自動(dòng)下載軟件由PowerBuilder開發(fā),數(shù)據(jù)庫采用Oracle,可以實(shí)現(xiàn)多種客戶端軟件的自動(dòng)下載。文章討論使用PowerBuilder開發(fā)的客戶端軟件的下載問題。
關(guān)鍵詞:PowerBuilder;自動(dòng)更新;數(shù)據(jù)庫;軟件版本
引言
在分布式系統(tǒng)(c/s)的開發(fā)中,一個(gè)困擾開發(fā)者的問題就是如何保持客戶端軟件的一致性,即在維護(hù)人員因某種原因修改了客戶端軟件的源程序之后如何使客戶端的軟件得到及時(shí)更新,防止出現(xiàn)新老版本不統(tǒng)一的問題。
為了解決這個(gè)問題,筆者使用了在原來的程序中加入自動(dòng)下載模塊的方法,但是有很多用戶抱怨程序并沒有得到更新。經(jīng)過測試,發(fā)現(xiàn)是其中的刪除pbd文件過程發(fā)生了錯(cuò)誤,原因是在整個(gè)程序包中,有很多互相聯(lián)系的塊,在程序運(yùn)行后,它們就已經(jīng)進(jìn)駐內(nèi)存,使得刪除時(shí)發(fā)生共享錯(cuò)誤,刪除失敗。
筆者重新設(shè)計(jì)了一個(gè)運(yùn)行程序,讓其在調(diào)用主程序之前完成自動(dòng)下載更新的任務(wù)。其基本原理是利用數(shù)據(jù)庫的長字符類型字段保存需要更新的文件,在需要時(shí)\"select\"出來,復(fù)制到硬盤上。
以下討論基于PowerBuilder6.5和Oracle8的環(huán)境(其他數(shù)據(jù)庫也可以,但是建表和編碼會(huì)有所不同)。PowerBuilder常用一個(gè)exe文件和多個(gè)pbd文件結(jié)合的程序發(fā)布方式,因此要下載新版本的客戶端軟件,只要下載它的exe文件和pbd文件即可。
1 下載策略
全盤的下載策略,需要考慮如何設(shè)計(jì)表,怎樣判斷有新的更新等等。初步考慮兩種策略:一種是相對(duì)方便的策略,即對(duì)于整個(gè)程序使用一個(gè)版本號(hào),即使只是更新了眾多pbd文件中的一個(gè),也要下載全部的pbd文件。在網(wǎng)速快、客戶端軟件容量不大的情況下,其等待時(shí)間是可以接受的。另一種則是讓每個(gè)pbd文件對(duì)應(yīng)不同的版本號(hào),以便只下載那些版本需要更新的pbd文件。這對(duì)于大型的客戶端軟件以及大型分布式的網(wǎng)絡(luò)環(huán)境非常有用。第一種策略可以說是第二種策略的簡化,因此這里僅討論第二種策略的實(shí)現(xiàn)方法。
(1)設(shè)計(jì)(存放程序文件的表:AppDown表1)
(2)文件是否更新的判斷,在本地建立下載版本控制文件(如在c:慨win%目錄下建立一個(gè)autodown.txt文件),存放客戶端軟件每個(gè)文件的文件名及版本號(hào)等信息。比較下載版本控制文件中的各個(gè)文件的版本號(hào)與AppDown表中的每個(gè)文件的版本號(hào),如果一致則認(rèn)為沒有更新,如果不一致則啟動(dòng)下載過程。如果本地沒有找到下載版本控制文件,則下載全部客戶端軟件,并建立—個(gè)當(dāng)前版本的下載版本控制文件。如果在AppDown有程序文件而下載版本控制文件中沒有的話,則下載此程序文件并在下載版本控制文件中加入這個(gè)程序文件的相關(guān)信息。
2 客戶端軟件上傳程序
要將客戶端軟件的exe文件和pbd文件上傳才能實(shí)現(xiàn)下載功能,這一步一般是由程序的維護(hù)人員操作的。為了能夠增加程序的通用性,將一些與數(shù)據(jù)庫連接相關(guān)以及版本信息、其他可變化內(nèi)容寫在配置文件中,使用ProfileString函數(shù)調(diào)用這些信息。比如: 連接成功后進(jìn)入上傳界面,使用GetFileOpenName函數(shù)取得要上傳的文件名。上傳文件需要使用UPDATEBLOB語句來將文件的內(nèi)容上傳入數(shù)據(jù)庫相應(yīng)字段(FDATA)中。在使用
3 自動(dòng)下載的實(shí)現(xiàn)
接下來就是自動(dòng)下載的操作了,這一步實(shí)際就是上傳的反操作。先把表中的每個(gè)文件與本地下載版本控制文件中的數(shù)據(jù)作比較,如果本地的版本號(hào)低或者沒有本地的版本文件,則要更新這個(gè)文件。
4 對(duì)本地的下載版本控制文件一些操作
Pb6.5的文件操作功能并不是很強(qiáng)大,但是它有一個(gè)很好用的控件,就是“DATAWINDOW”——數(shù)據(jù)窗口,我們可以用它來實(shí)現(xiàn)對(duì)文件的讀寫。
5 結(jié)束語
以上是筆者的一些應(yīng)用經(jīng)驗(yàn),所述方法曾經(jīng)在杭州市社會(huì)保險(xiǎn)服務(wù)局的機(jī)關(guān)事業(yè)程序中使用過。隨著使用的深入,它還可以擴(kuò)展出更多的功能,如可以通過它刪除一些已經(jīng)不需要的pbd等文件,這只需要在表1中增加一個(gè)字段,然后修改下載程序增加一些功能就可以了。