Android通过webservice连接SQLServer详细教程.doc_第1页
Android通过webservice连接SQLServer详细教程.doc_第2页
Android通过webservice连接SQLServer详细教程.doc_第3页
Android通过webservice连接SQLServer详细教程.doc_第4页
Android通过webservice连接SQLServer详细教程.doc_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)分类:Android学习笔记2012-11-10 15:0994154人阅读评论(317)收藏举报androidsqlserverwebservice数据库服务器目录(?)+ 本文为原创,如果转载请注明出处/zhyl8157121/article/details/8169172其实之前发过一篇这样的博文/zhyl8157121/article/details/7709552,但那个只是简单记录了一些自己的想法,并没有想作为教程来看,后来由于一些朋友想要源代码,就附上了下载地址,但并没有做什么讲解,从现在开始,准备做一份详细的Android如何连接Sqlserver的教程.由于本人才疏学浅,如果有什么不对的地方欢迎大家批评指正. 为了避免再次被说标题党,这里先说明些事情: 第一,android没法直接连接SQLServer,起码我没有发现方法,想想看,sqlserver安装之后有多大,android程序是跑在手机上的,想让程序直接访问sqlserver,那手机要多大的内存? 第二,本文是通过一个“桥梁”webservice来间接访问SQLServer的,当然还有其他方法,感兴趣的同学可以自行百度。 如果理解了上面两点,好了咱们继续。 教程会拿一个具体的例子来讲,一步一步来,也许细节上还可以继续加工,但大致的流程就是这样的。 本教程有五个部分: 项目说明 开发环境部署 数据库设计 服务器端程序设计 客户端(android端)程序设计项目说明 这个项目意在实现一个简单的android连接Sqlserver的功能。 就做一个简单的库存管理功能,包括对仓库内现有货物的查看、货物信息的增加&删除。开发环境的部署 今天主要讲解第一个部分,开发环境的部署.操作系统:Windows764bit旗舰版 当然这个是什么基本无所谓,只是我是在这上面开发的,不过家庭普通版的貌似不能配置IIS,就是咱们后面要使用的一个服务.android端:eclipse + ADT集成开发环境 相信看到这个教程的基本都知道如何做这些了.如果真的是有哪位同学android开发环境没有配置好而来看这篇教程,请先移步-服务器端:VisualStudio 2010旗舰版 这个是用来写website/webservice的,开发语言使用C# (即.net)数据库:SQLServer2008 R2 其实这个是什么版本也无所谓吧,教程使用的都是比较基本的东西,所以版本的差异基本可以忽略。IIS 7.5:正确配置并开启IIS服务 如果想将website/webservice发布出去就要开启这个服务。但是如果仅仅是在本地进行测试就不需要配置,直接在VS中运行就可以。 其实我在开发的时候也只是配置IIS的时候遇到了一些问题,这里给出IIS的配置方法./view/95cf9fd9ad51f01dc281f1af.html这篇文库给的还是很详细的,我当初就是照着这个配置的。数据库设计数据库名称:StockManage表设计表名称:C表说明:列名中文名称数据型态必填说明Cno货物编号IntV主键,自增Cname货物名称StringCnum货物数量Int下图是设计表的时候的截图。向表中输入内容吐槽一下:为什么这里猫、狗、电话都有,甚至还有Surface?!这只能说当时LZ在想这些服务器端程序设计(Webservice) 其实服务端可以写成webservice也可以写成website,前者只是提供一种服务,而后者是可以提供用户界面等具体的页面,后者也就是咱们平时所说的“网站”。 两者的区别: Web Service 只提供程序和接口,不提供用户界面 Web Site 提供程序和接口,也提供用户界面(网页) 由于咱们只是需要一个中介来访问sqlserver,所以写成webservice足够了。 目标:写一个Website访问Sqlserver,获取数据并转换成xml格式,然后传递给android客户端。1.新建一个Webservice工程2.视图 -其它窗口 - 服务器资源管理器3.右键数据连接 - 添加连接4.选择Microsoft Sqlserver5.如下图所示选择(可以点击测试连接来检测连接是否成功,然后点击确定)6.数据库的查看和编辑也可以在VS中进行了7.先查看一下数据库属性并记录下连接属性8.新建一个类DBOperation,代码如下:csharpview plaincopyprint?1. usingSystem;2. usingSystem.Data;3. usingSystem.Configuration;4. usingSystem.Linq;5. usingSystem.Web;6. usingSystem.Web.Security;7. usingSystem.Web.UI;8. usingSystem.Web.UI.HtmlControls;9. usingSystem.Web.UI.WebControls;10. usingSystem.Web.UI.WebControls.WebParts;11. usingSystem.Xml.Linq;12. usingSystem.Data.SqlClient;13. usingSystem.Text.RegularExpressions;14. usingSystem.Collections;15. usingSystem.Collections.Generic;16. 17. namespaceStockManageWebservice18. 19. /20. /一个操作数据库的类,所有对SQLServer的操作都写在这个类中,使用的时候实例化一个然后直接调用就可以21. /22. publicclassDBOperation:IDisposable23. 24. publicstaticSqlConnectionsqlCon;/用于连接数据库25. 26. /将下面的引号之间的内容换成上面记录下的属性中的连接字符串27. privateStringConServerStr=DataSource=BOTTLE-PC;InitialCatalog=StockManage;IntegratedSecurity=True;28. 29. /默认构造函数30. publicDBOperation()31. 32. if(sqlCon=null)33. 34. sqlCon=newSqlConnection();35. sqlCon.ConnectionString=ConServerStr;36. sqlCon.Open();37. 38. 39. 40. /关闭/销毁函数,相当于Close()41. publicvoidDispose()42. 43. if(sqlCon!=null)44. 45. sqlCon.Close();46. sqlCon=null;47. 48. 49. 50. /51. /获取所有货物的信息52. /53. /所有货物信息54. publicListselectAllCargoInfor()55. 56. Listlist=newList();57. 58. try59. 60. stringsql=select*fromC;61. SqlCommandcmd=newSqlCommand(sql,sqlCon);62. SqlDataReaderreader=cmd.ExecuteReader();63. 64. while(reader.Read()65. 66. /将结果集信息添加到返回向量中67. list.Add(reader0.ToString();68. list.Add(reader1.ToString();69. list.Add(reader2.ToString();70. 71. 72. 73. reader.Close();74. cmd.Dispose();75. 76. 77. catch(Exception)78. 79. 80. 81. returnlist;82. 83. 84. /85. /增加一条货物信息86. /87. /货物名称88. /货物数量89. publicboolinsertCargoInfo(stringCname,intCnum)90. 91. try92. 93. stringsql=insertintoC(Cname,Cnum)values(+Cname+,+Cnum+);94. SqlCommandcmd=newSqlCommand(sql,sqlCon);95. cmd.ExecuteNonQuery();96. cmd.Dispose();97. 98. returntrue;99. 100. catch(Exception)101. 102. returnfalse;103. 104. 105. 106. /107. /删除一条货物信息108. /109. /货物编号110. publicbooldeleteCargoInfo(stringCno)111. 112. try113. 114. stringsql=deletefromCwhereCno=+Cno;115. SqlCommandcmd=newSqlCommand(sql,sqlCon);116. cmd.ExecuteNonQuery();117. cmd.Dispose();118. 119. returntrue;120. 121. catch(Exception)122. 123. returnfalse;124. 125. 126. 127. 9. 修改Service1.asmx.cs代码如下:csharpview plaincopyprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Web;5. usingSystem.Web.Services;6. 7. namespaceStockManageWebservice8. 9. /10. /Service1的摘要说明11. /12. WebService(Namespace=/)13. WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)14. System.ComponentModel.ToolboxItem(false)15. /若要允许使用ASP.NETAJAX从脚本中调用此Web服务,请取消对下行的注释。16. /System.Web.Script.Services.ScriptService17. publicclassService1:System.Web.Services.WebService18. 19. DBOperationdbOperation=newDBOperation();20. 21. WebMethod22. publicstringHelloWorld()23. 24. returnHelloWorld;25. 26. 27. WebMethod(Description=获取所有货物的信息)28. publicstringselectAllCargoInfor()29. 30. returndbOperation.selectAllCargoInfor().ToArray();31. 32. 33. WebMethod(Description=增加一条货物信息)34. publicboolinsertCargoInfo(stringCname,intCnum)35. 36. returndbOperation.insertCargoInfo(Cname,Cnum);37. 38. 39. WebMethod(Description=删除一条货物信息)40. publicbooldeleteCargoInfo(stringCno)41. 42. returndbOperation.deleteCargoInfo(Cno);43. 44. 45. 10.运行程序(F5),会自动打开一个浏览器,可以看到如下画面:11.选择相应的功能并传递参数可以实现调试从浏览器中调试程序:下图选择的是增加一条货物信息12. 程序执行的结果:13.另,记住这里的端口名,后面android的程序中添入的端口号就是这个:客户端(android端)程序设计程序代码:1.MainActivityjavaview plaincopyprint?1. packagecom.bottle.stockmanage;2. 3. importjava.util.ArrayList;4. importjava.util.HashMap;5. importjava.util.List;6. 7. importandroid.app.Activity;8. importandroid.app.Dialog;9. importandroid.os.Bundle;10. importandroid.view.Gravity;11. importandroid.view.View;12. importandroid.view.View.OnClickListener;13. importandroid.view.Window;14. importandroid.view.WindowManager;15. importandroid.widget.Button;16. importandroid.widget.EditText;17. importandroid.widget.ListView;18. importandroid.widget.SimpleAdapter;19. importandroid.widget.Toast;20. 21. publicclassMainActivityextendsActivity22. 23. privateButtonbtn1;24. privateButtonbtn2;25. privateButtonbtn3;26. privateListViewlistView;27. privateSimpleAdapteradapter;28. privateDBUtildbUtil;29. 30. Override31. publicvoidonCreate(BundlesavedInstanceState)32. super.onCreate(savedInstanceState);33. setContentView(R.layout.activity_main);34. 35. btn1=(Button)findViewById(R.id.btn_all);36. btn2=(Button)findViewById(R.id.btn_add);37. btn3=(Button)findViewById(R.id.btn_delete);38. listView=(ListView)findViewById(R.id.listView);39. dbUtil=newDBUtil();40. 41. btn1.setOnClickListener(newOnClickListener()42. 43. Override44. publicvoidonClick(Viewv)45. hideButton(true);46. setListView();47. 48. );49. 50. btn2.setOnClickListener(newOnClickListener()51. 52. Override53. publicvoidonClick(Viewv)54. hideButton(true);55. setAddDialog();56. 57. );58. 59. btn3.setOnClickListener(newOnClickListener()60. 61. Override62. publicvoidonClick(Viewv)63. hideButton(true);64. setDeleteDialog();65. 66. );67. 68. 69. /*70. *设置弹出删除对话框71. */72. privatevoidsetDeleteDialog()73. 74. finalDialogdialog=newDialog(MainActivity.this);75. dialog.setContentView(R.layout.dialog_delete);76. dialog.setTitle(输入想要删除的货物的编号);77. WindowdialogWindow=dialog.getWindow();78. WindowManager.LayoutParamslp=dialogWindow.getAttributes();79. dialogWindow.setGravity(Gravity.CENTER);80. dialogWindow.setAttributes(lp);81. 82. finalEditTextcNoEditText=(EditText)dialog.findViewById(R.id.editText1);83. ButtonbtnConfirm=(Button)dialog.findViewById(R.id.button1);84. ButtonbtnCancel=(Button)dialog.findViewById(R.id.button2);85. 86. btnConfirm.setOnClickListener(newOnClickListener()87. 88. Override89. publicvoidonClick(Viewv)90. dbUtil.deleteCargoInfo(cNoEditText.getText().toString();91. dialog.dismiss();92. hideButton(false);93. Toast.makeText(MainActivity.this,成功删除数据,Toast.LENGTH_SHORT).show();94. 95. );96. 97. btnCancel.setOnClickListener(newOnClickListener()98. 99. Override100. publicvoidonClick(Viewv)101. dialog.dismiss();102. hideButton(false);103. 104. );105. 106. dialog.show();107. 108. 109. /*110. *设置弹出添加对话框111. */112. privatevoidsetAddDialog()113. 114. finalDialogdialog=newDialog(MainActivity.this);115. dialog.setContentView(R.layout.dialog_add);116. dialog.setTitle(输入添加的货物的信息);117. WindowdialogWindow=dialog.getWindow();118. WindowManager.LayoutParamslp=dialogWindow.getAttributes();119. dialogWindow.setGravity(Gravity.CENTER);120. dialogWindow.setAttributes(lp);121. 122. finalEditTextcNameEditText=(EditText)dialog.findViewById(R.id.editText1);123. finalEditTextcNumEditText=(EditText)dialog.findViewById(R.id.editText2);124. ButtonbtnConfirm=(Button)dialog.findViewById(R.id.button1);125. ButtonbtnCancel=(Button)dialog.findViewById(R.id.button2);126. 127. btnConfirm.setOnClickListener(newOnClickListener()128. 129. Override130. publicvoidonClick(Viewv)131. 132. dbUtil.insertCargoInfo(cNameEditText.getText().toString(),cNumEditText.getText().toString();133. dialog.dismiss();134. hideButton(false);135. Toast.makeText(MainActivity.this,成功添加数据,Toast.LENGTH_SHORT).show();136. 137. );138. 139. btnCancel.setOnClickListener(newOnClickListener()140. 141. Override142. publicvoidonClick(Viewv)143. dialog.dismiss();144. hideButton(false);145. 146. );147. dialog.show();148. 149. 150. /*151. *设置listView152. */153. privatevoidsetListView()154. 155. listView.setVisibility(View.VISIBLE);156. 157. ListHashMaplist=newArrayListHashMap();158. 159. list=dbUtil.getAllInfo();160. 161. adapter=newSimpleAdapter(162. MainActivity.this,163. list,164. R.layout.adapter_item,165. newStringCno,Cname,Cnum,166. newintR.id.txt_Cno,R.id.txt_Cname,R.id.txt_Cnum);167. 168. listView.setAdapter(adapter);169. 170. 171. 172. /*173. *设置button的可见性174. */175. privatevoidhideButton(booleanresult)176. if(result)177. btn1.setVisibility(View.GONE);178. btn2.setVisibility(View.GONE);179. btn3.setVisibility(View.GONE);180. else181. btn1.setVisibility(View.VISIBLE);182. btn2.setVisibility(View.VISIBLE);183. btn3.setVisibility(View.VISIBLE);184. 185. 186. 187. 188. /*189. *返回按钮的重写190. */191. Override192. publicvoidonBackPressed()193. 194. if(listView.getVisibility()=View.VISIBLE)195. listView.setVisibility(View.GONE);196. hideButton(false);197. else198. MainActivity.this.finish();199. 200. 201. 2.HttpConnSoap(改类已经过时,更多请参照/zhyl8157121/article/details/8709048)javaview plaincopyprint?1. packagecom.bottle.stockmanage;2. 3. importjava.io.IOException;4. importjava.io.InputStream;5. importjava.io.OutputStream;6. .HttpURLConnection;7. .URL;8. importjava.util.ArrayList;9. 10. publicclassHttpConnSoap11. publicArrayListGetWebServre(StringmethodName,ArrayListParameters,ArrayListParValues)12. ArrayListValues=newArrayList();13. 14. /ServerUrl是指webservice的url15. /是让android模拟器访问本地(PC)服务器,不能写成16. /11125是指端口号,即挂载到IIS上的时候开启的端口17. /Service1.asmx是指提供服务的页面18. StringServerUrl=:11125/Service1.asmx;19. 20. /StringsoapAction=/LongUserId1;21. StringsoapAction=/+methodName;22. /Stringdata=;23. Stringsoap=24. +25. +;26. Stringtps,vps,ts;27. StringmreakString=;28. 29. mreakString=;30. for(inti=0;iParameters.size();i+)31. tps=Parameters.get(i).toString();32. /设置该方法的参数为.netwebService中的参数名称33. vps=ParValues.get(i).toString();34. ts=+vps+;35. mreakString=mreakString+ts;36. 37. mreakString=mreakString+;38. /*39. +40. +string1166141. +string11142. +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论