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