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