• android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过


    前两天,公司有一个利用android远程操作sqlserver的项目,对此我是毫无头绪的,但也挺感兴趣的,于是开始上网搜索方法,网上有挺多方法了,发现使用webservice的挺多的,不过我对这些技术一点了解都没有,最后也决定用webservice+xfire做,花了几天的时间赶写了一个demo,终于就就在刚刚完工了,想起来写的东西不多,但是解决各种小错误也花了挺多时间,现在也仍然有个没有解决的问题,在文章后面会提到,还希望有会的大侠指点下。最终实现用到的工具:sqlserver+xfire+tomcat+android,下面我大概介绍一下这个小demo吧。注:因为以前对相关知识不了解,所以大概的原理知道,很多细节的东西不是很清楚,其中可能有些说的不对的地方,还望高手指出,万分感谢!

        这个demo主要实现的是通过android客户端对sqlserver数据库的增删改查功能,要做的项目说到底也就是这些基本功能,只不过涉及了复杂的业务逻辑处理,这个小demo算得上是解决了一大半的技术难题。实现分为两个方面,一方面是服务器端,主要是连接sqlserver进行交互,另一方面是客户端,通过android发送请求与服务器端进行交互进而与数据库交互。下面介绍下它的功能,(因为只是做个测试,所以界面就随便做了下,挺难看的,谅解谅解

     ^ ^):


    第一个功能就是登陆功能


    第二个功能是查询所有用户信息,显示在listview中。


    第三个功能是新增用户功能。


    第四个功能是修改用户功能。


    第五个功能是删除用户功能。


    服务端控制台打印信息:


    因为代码的内容实在太多,所以本文主要介绍下大概的框架以及一些需要注意的地方,算是给大家参考参考,同时也是做个笔记,以后在遇到类似的项目可以重复使用。

    首先看看数据库表的结构,如下图


    其中id为primary key,自增1,name和pwd不能为空


    一、服务端:

    开发工具用的eclipse,需要引入xfire的jar包,项目的结构图如下:


    注:本项目为dynamic web project

    需要注意的地方:

    1、导入xfire要用的jar包,把xfire-all-1.2.6.jar以及lib下的所有jar包加入到项目的....WebContentWEB-INFlib路径下

    2、导入sqlserver驱动jar包,这个地方比较麻烦,因为sqlserver2000和2005是有区别的,本例使用的2005,引入的是一个jar包,如果是2000的话需要引入三个jar包,在源码的文档里有相应的注释。

    3、在eclipse里安装好tomcat插件,为了不使篇幅太长,相关操作将另行发文章,不过这个一般都会。

    4、项目中的IUser.aegis.xml文件


    引用网友的解释:在写webservice接口的时候,通常大家都会定义一些方法的参数,但是根据xfire的xsd文件描述情况来看,它的参数命名通常是in0,in1等等,一次类推,很不友好。
            按照XFire-Spring生成的WSDL文档中接口参数名极不友好:
    <xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string" />
    <xsd:element maxOccurs="1" minOccurs="1" name="in1" nillable="true" type="xsd:string" />
    <xsd:element maxOccurs="1" minOccurs="1" name="in2" nillable="true" type="xsd:string" />
    <xsd:element maxOccurs="1" minOccurs="1" name="in3" nillable="true" type="xsd:string" /> 
            大家都知道,作为一个合格的程序员,在写代码的时候方法参数命名什么的要尽量做到见名知意,显然他这种风格是不适合我们的。因此我们要创新,这就有了下文。
            如何自动将in0与in1替换成友好的参数名称呢 ?
            方法如下:
      在与接口类同一包下面建一个接口类名称.aegis.xml 的文件,内容如下
    <?xml version="1.0" encoding="UTF-8"?>  
    <mappings>  
        <mapping>  
           <method name="settleMessage">  
               <parameter index="0"  mappedName="id" />
               <parameter index="1"  mappedName="username" />
               <parameter index="2"  mappedName="password" /> 
           </method>
       </mapping>  
    </mappings> 

    注意:
                    name为接口中方法名称 
                    index为方法中第一个参数 
                    mappedName为替换后的名称 
                    该XML文件的位置一定要与你定义的webservice的接口位于同一个目录(包下)否则不起作用

    5、services.xml


    需要在这儿注册service以及其实现类和命名空间。


    6、完成后把项目部署到tomcat服务器,然后启动服务器输入如下地址(注:我的tomcat端口号改为8888了,所以此地址只是作为参考)http://localhost:8888/hysoftServer/services,如果出现下面所示的页面基本上就算是成功了



    二、android客户端

    开发工具也是eclipse,项目结构图如下:


    需要注意的地方:

    1、引入ksoap2的jar包本例使用的是ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar,这儿有一个值得注意的地方,引入后还要勾选下图的地方,这儿耽误了我不少时间,进入方法右击项目build path--configure build path


    2、记得在AndroidManifest.xml中加入联网权限,<uses-permission android:name="android.permission.INTERNET"/>

    3、MyWebServiceHelper,这是最重要的一个类了,负责与服务器的交互,其中有几个参数需要注意下


    参数targetNameSpace 与 服务器端services.xml中指定的命名空间(<namespace></namespace>)标签一致

    参数WSDL为"http://服务器ip地址/服务器端项目名/services/MyService"


    其他地方参考源代码中的注释,在做这个demo的时候遇到过很多问题,将总结完后将另行发博客说明,在此我有个一直没解决的问题,希望会的高手给个例子。新增用户功能我刚开始是准备使用User对象做参数的,但是后来报错了,上网查了下,说是自己定义的对象不能当参数传,需要经过其他处理,也试了几种方法,都没成功,最后倒是看到一个网友的回答如下:


    如果谁有好的办法还望指点下。


    本文所使用的源代码以及需要使用到的jar包都传到本人的资源里了,有需要的可以去下载!

    jar包包括:所有用到的jar包 4类
    1、xfire(n多个) --webservice框架用到的
    2、sqlserver驱动 (3个)--连接sqlserver数据库用到的
    3、ksoap2-android-assembly-2.6.5-jar-with-dep(1个)

    注:jar包路径最好别含中文


    源文件包下载


  • 相关阅读:
    Activiti服务类-1 DynamicBpmnService服务类
    Activiti工作流学习(一)——Activiti服务类
    怎么才能将文件流或者图片转化为base64,传到前台展示
    idea导入eclipse项目
    使用IDEA开发Activiti工作流
    idea中创建多module的maven工程
    Git的使用--如何将本地项目上传到Github
    Spring Boot 入门搭建
    Json中相同或者重复记录的值相加组成新的Json
    前端基础之jQuery入门 01
  • 原文地址:https://www.cnblogs.com/james1207/p/3301822.html
Copyright © 2020-2023  润新知