劉穎++胡暢霞++米建
摘 要 本文通過(guò)對(duì)Android連接數(shù)據(jù)庫(kù)的研究,選擇Microsoft Visual Studio 2010,eclipse和SQLServer為技術(shù)開(kāi)發(fā)平臺(tái),以移動(dòng)開(kāi)發(fā)為案例,設(shè)計(jì)了Android通過(guò)WebService與數(shù)據(jù)庫(kù)的連接。
關(guān)鍵詞 WebService;Android;SQLServer
中圖分類號(hào)TP3 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 1674-6708(2015)145-0048-01
隨著現(xiàn)代社會(huì)中手機(jī)用戶的普遍增多,手機(jī)應(yīng)用程序也如雨后春筍般成長(zhǎng)起來(lái)。一個(gè)出色的手機(jī)應(yīng)用程序免不了要與數(shù)據(jù)庫(kù)進(jìn)行連接,但是Android不能直接連接數(shù)據(jù)庫(kù),因此本文介紹了通過(guò)一個(gè)“橋梁”——webservice來(lái)訪問(wèn)SQLServer數(shù)據(jù)庫(kù)。
1 Android連接數(shù)據(jù)庫(kù)的方式
在Android開(kāi)發(fā)中,一般有如下幾種方式連接數(shù)
據(jù)庫(kù)。
1)Android訪問(wèn)自帶的SQLite數(shù)據(jù)庫(kù)。通過(guò)使用數(shù)據(jù)庫(kù)操作幫助類繼承SQLiteOpenHelper。在DAO層借助數(shù)據(jù)庫(kù)操作幫助類寫數(shù)據(jù)庫(kù)操作的方法。Activity調(diào)用DAO層的數(shù)據(jù)庫(kù)操作方法進(jìn)行操作。
2)Android可以通過(guò)Http協(xié)議獲取數(shù)據(jù)。將Http協(xié)議連接對(duì)象,通過(guò)Post請(qǐng)求向服務(wù)器傳送數(shù)據(jù),數(shù)據(jù)放在HTML HEADER內(nèi)一起傳送到服務(wù)端URL地址。
3)通過(guò)SOAP協(xié)議獲取數(shù)據(jù)。客戶生成SOAP請(qǐng)求,嵌入在HTTP POST請(qǐng)求中,發(fā)送到服務(wù)器上,服務(wù)器再把這些請(qǐng)求通過(guò)HTTP應(yīng)答的方式把它送回到客戶端。
2 Android連接數(shù)據(jù)庫(kù)的詳細(xì)設(shè)計(jì)
2.1 項(xiàng)目背景
本人承擔(dān)了河北省大學(xué)生創(chuàng)新項(xiàng)目《“互聯(lián)網(wǎng)+”下畢業(yè)設(shè)計(jì)評(píng)價(jià)系統(tǒng)》,采用了SQL Server數(shù)據(jù)庫(kù),第一階段中利用.net技術(shù)已經(jīng)開(kāi)發(fā)了網(wǎng)站,第二階段需要開(kāi)發(fā)配套的手機(jī)APP,但是Android如何連接數(shù)據(jù)庫(kù),SQL server中的數(shù)據(jù)如何通過(guò)手機(jī)顯示,成為了本項(xiàng)目開(kāi)發(fā)的關(guān)鍵問(wèn)題。
2.2 解決方案
本人采用了SOAP協(xié)議,通過(guò)WebService這個(gè)橋梁實(shí)現(xiàn)了對(duì)SQLServer數(shù)據(jù)庫(kù)的訪問(wèn)。
首先,本人需要設(shè)計(jì)WebService應(yīng)用程序連接數(shù)據(jù)庫(kù)。在Web.config文件中設(shè)置虛擬目錄,連接數(shù)據(jù)庫(kù)。下面以“在線視頻播放”部分功能進(jìn)行具體說(shuō)明。
在本模塊中,需要根據(jù)視頻的id,從數(shù)據(jù)庫(kù)中獲取視頻網(wǎng)址,然后在網(wǎng)上進(jìn)行在線播放。下面是實(shí)現(xiàn)步驟。
首先在VS2010中定義WebService:
1)服務(wù)名:SelectVideo:在線視頻的函數(shù)服
務(wù)名。
2)參數(shù):id:在線視頻的id,通過(guò)id獲取視頻的網(wǎng)址。
3)返回值:list:返回視頻的網(wǎng)址。
Public List
String sql=”Select F_path from V_Video where F_id= ”+id+” ”。
SqlDataReader reader=db.ReturnDataReader(sql),定義SqlDataReader類型變量,執(zhí)行SQL語(yǔ)句。
list.Add(reader[0].ToStirng()),用list數(shù)組返回視頻網(wǎng)址
之后在eclipse中, 引入ksoap2-android項(xiàng)目的ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar包。之后用ksoap2-Android調(diào)用Webservice,具體操作過(guò)程如下。
(1)創(chuàng)建HttpTransportSE對(duì)象,該對(duì)象用于調(diào)用WebService操作;
final HttpTransportSE ht=new HttpTransportSE(” ”);
(2)創(chuàng)建SoapSerializationEnvelope對(duì)象;
final SoapSerializationEnvelopeanvelope =new SoapSerializationEnvelope (SoapEnvelope.VERLL);
(3)創(chuàng)建SoapObject對(duì)象,創(chuàng)建該對(duì)象時(shí)需要傳入所要調(diào)用的WebService的命名空間;
static final String SERVICE_NS = “http://tempuri.org/”;
SoapObject soapobject=new SoapObject(SERVICE_NS,methodName)
將參數(shù)傳給Web Service服務(wù)端,調(diào)用Soapobject對(duì)象的addproperty方法。
例如:SoapObject.addProperty(“zjid”,zjid),為WebService服務(wù)器傳遞參數(shù),zjid就是該視頻的id,通過(guò)id,獲取視頻的網(wǎng)址,然后進(jìn)行視頻的播放。
(4)直接對(duì)bodyout屬性賦值,將SoapObject對(duì)象設(shè)為SoapSerializationEnvelope的傳出SOAP消
息體。
envelope.bodyout=soapobject;
(5)調(diào)用對(duì)象的call方法,并以SoapSerializationEnvelope作為參數(shù)調(diào)用遠(yuǎn)程WebService。
ht.call(SERVICE_NS+methodName,envelope);
(6)調(diào)用完成后,訪問(wèn)SoapSerializationEnvelope對(duì)象的bodyin屬性。
SoapObject result=(SoapObject)envelope.bodyin;
(7)在Activity中用SoapObject定義變量調(diào)用
函數(shù)。
SoapObject detail=Web.getVideo(id)
String path=detail.getProperty(i).toString();
通過(guò)這些操作,我們就可以通過(guò)WebService對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)訪問(wèn),通過(guò)視頻id獲取視頻網(wǎng)址,從而進(jìn)行視頻的在線播放。
3 結(jié)論
作者利用WebServcie這個(gè)橋梁,實(shí)現(xiàn)Android和SQL Server數(shù)據(jù)庫(kù)的連接,并將該方法應(yīng)用在了大學(xué)生創(chuàng)新項(xiàng)目中,實(shí)踐證明,該方法可以高效快速的顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
參考文獻(xiàn)
[1]袁向英.基于Android系統(tǒng)的數(shù)據(jù)庫(kù)開(kāi)發(fā)和插件技術(shù)的應(yīng)用開(kāi)發(fā).2014.
[2]王紹祥,邵禹斌,龍華,等.Android手機(jī)與數(shù)據(jù)庫(kù)的一種數(shù)據(jù)交互方法.2011.
[3]黃淑靜,楊紅梅.利用JSON+WebService實(shí)現(xiàn)Android訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù).2013.
[4]王飛,王創(chuàng)偉.基于Android的數(shù)據(jù)庫(kù)初始化方案的研究與應(yīng)用.2012.