我学到了android连接远程数据库,下面我是通过sql数据库来举例

testWebService.java:
package com.testWebService;


 import org.ksoap2.SoapEnvelope;
 import org.ksoap2.serialization.SoapObject;
 import org.ksoap2.serialization.SoapPrimitive;
 import org.ksoap2.serialization.SoapSerializationEnvelope;
 import org.ksoap2.transport.HttpTransportSE;


 import android.app.Activity;
 import android.os.Bundle;
 import android.widget.TextView;


 public class TestWebService extends Activity {





private TextView tv;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


tv = (TextView) findViewById(R.id.tv);
tv.setText(ws());
}
 //登陆private String CheckLog(String UserName,String UserPwd)
{
String NameSpace = "http://tempuri.org/";// 这里和asmx中的NameSpace属性保持一致,这里我记得是可以更改的,但是两者要一样(没有试过,感兴趣的朋友可以试试)
String u = "http://192.168.0.121:8013";// 请更换成你要访问的服务器地址
String webService = "/WebServiceForAndroid.asmx";// webService目录
String MethodName = "GetCount";// 要调用的webService方法
String soapAction = NameSpace + MethodName;
String url = u + webService;// 最终要访问的网址  这里也可以直接url="http://192.168.0.121:8013/WebServiceForAndroid.asmx"两个效果都是一样的


String result = "";
try {
SoapObject request = new SoapObject(NameSpace, MethodName);// NameSpace
request.addProperty("name", UserName);//

这里的name名称必须和asmx中xml节点名称保持一致(这里是重点,不然传值传不过去)下面有图,请看图

android连接远程数据库 android 远程数据库_android


request.addProperty("pass", UserPwd);
// webService方法中的参数,这个根据你的webservice来,可以没有。
// 请注意,参数名称和参数类型,客户端和服务端一定要一致,否则将可能获取不到你想要的值
// request.addProperty("x",5);
// request.addProperty("y", 6);


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);


envelope.dotNet = true;// 访问.NET的webservice


envelope.setOutputSoapObject(request);


HttpTransportSE ht = new HttpTransportSE(url);


ht.call(soapAction, envelope);// 调用call方法,访问webservice


if (envelope.getResponse() != null) {
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// 如果要返回对象集合,在服务端可以将对象或集合序列化成json字符串返回,这边再反序列化成对象或集合
result = response.toString();// 这里获得了webService的返回值
}


} catch (Exception e) {
result = e.getMessage();
}
return result;
}

// webService操作要访问网络,所以最好是使用线程来做,这里只是示例,所以就不考虑了
private String ws() {
String NameSpace = "http://tempuri.org/";// 这个是web中asmx中的NameSpace 保持一致,这里可以选择另外一种方式,这里就不举例了
String u = "http://192.168.0.121:8013";// 请更换成你要访问的服务器地址
String webService = "/WebServiceForAndroid.asmx";// webService目录
String MethodName = "HelloWorld";// 要调用的webService方法
String soapAction = NameSpace + MethodName;
String url = u + webService;// 最终要访问的网址


String result = "";
try {
SoapObject request = new SoapObject(NameSpace, MethodName);// NameSpace
// webService方法中的参数,这个根据你的webservice来,可以没有。
// 请注意,参数名称和参数类型,客户端和服务端一定要一致,否则将可能获取不到你想要的值
// request.addProperty("x",5);
// request.addProperty("y", 6);


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);


envelope.dotNet = true;// 访问.NET的webservice


envelope.setOutputSoapObject(request);


HttpTransportSE ht = new HttpTransportSE(url);


ht.call(soapAction, envelope);// 调用call方法,访问webservice,必须将防火墙关闭,不然这里就直接闪退了,如果是远程服务器,要看防火墙或者是否给你配有对外端口


if (envelope.getResponse() != null) {
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// 如果要返回对象集合,在服务端可以将对象或集合序列化成json字符串返回,这边再反序列化成对象或集合
result = response.toString();// 这里获得了webService的返回值
}


} catch (Exception e) {
result = e.getMessage();
}
return result;
}
 }
main.xml
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
 <TextView  android:id="@+id/tv"
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" //到string中注册,可也不要,这里是如果没有从远程服务器上获取返回值显示hello world    />
 </LinearLayout>web端:
WebServiceForAndroid.asmx
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
 using System.Web.Services;
 using System.Data.SqlClient;
 using System.Data;
 using System.Web.Services.Protocols;


 namespace WebService
 {
     /// <summary>
     /// WebServiceForAndroid 的摘要说明
     /// </summary>
     [WebService(Namespace = "http://tempuri.org/")]
     //[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
     //[System.ComponentModel.ToolboxItem(false)]
     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
     // [System.Web.Script.Services.ScriptService]
     [SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)] 
     public class WebServiceForAndroid : System.Web.Services.WebService
     {
         private static string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["WebService"].ToString();//在config中添加节点:<connectionStrings>
     <add name="WebService" connectionString="server=.;database=StockManage;uid=sa;pwd=123456;" providerName="System.Data.SqlClient" />
   </connectionStrings>
         SqlConnection myStr = new SqlConnection(connStr);


         [WebMethod]
         public string HelloWorld()
         {
             return "Hello World  你已经成功连接到pc额";
         }
         /// <summary>
         /// 判断登录
         /// </summary>
         /// <param name="name"></param>
         /// <param name="pass"></param>
         /// <returns></returns>
         [WebMethod]
         public int Verdict(string name, string pass)
         {
             int b = 0;
             try
             {
                 #region 查询
               
                 string sql = "select * from [User] where UserName='" + name + "' and UserPass='" + pass + "'";
                 SqlCommand MyCommand = new SqlCommand(sql, myStr); //定义一个数据库操作指令
                 SqlDataAdapter SelectAdapter = new SqlDataAdapter();//定义一个数据适配器
                 SelectAdapter.SelectCommand = MyCommand;//定义数据适配器的操作指令
                 DataSet MyDataSet = new DataSet();//定义一个数据集
                 myStr.Open();//打开数据库连接
                 SelectAdapter.SelectCommand.ExecuteNonQuery();//执行数据库查询指令
                 myStr.Close();
                 SelectAdapter.Fill(MyDataSet);
                 int n= MyDataSet.Tables[0].Rows.Count;
                 if (n!= 0)
                 {
                     b = 1;
                 }
                
                 #endregion




             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message.ToString()); 
             }
             return b;
            
         }


         /// <summary>
         /// 注册写入
         /// </summary>
         /// <param name="name"></param>
         /// <param name="pass"></param>
         /// <returns></returns>
         [WebMethod]
         public int InserValue(string name, string pass, string email, string remrk)
         {
             int n = 0;
             string sql = "insert into [User](UserName,UserPass,UserEmail,Remark,AddTime)values('" + name + "','" + pass + "','" + email + "','" + remrk + "','" + DateTime.Now + "')";
             SqlCommand MyCommand = new SqlCommand(sql, myStr);
             try
             {
                 myStr.Open();
                 n = Convert.ToInt32(MyCommand.ExecuteNonQuery());
                 myStr.Close();


             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message.ToString());
             }


             return n;
         }


         /// <summary>
         /// 查询账号
         /// </summary>
         /// <param name="name"></param>
         /// <param name="pass"></param>
         /// <returns></returns>
         [WebMethod]
         public int GetCount(string name)
         {
             int n = 0;
             SqlCommand cmd = new SqlCommand(@"select count(*) from [User] where UserName='" + name + "'", myStr);
             try
             {
                 myStr.Open();
                 n = Convert.ToInt32(cmd.ExecuteScalar());
                 myStr.Close();


             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message.ToString());
             }
             return n;
         }
     }
 }

数据库:

名:user

字段:UserName,UserPass,UserEmail,Remark,AddTime

这里例子我只做了访问hello world,将java中:MethodName改成asmx中的方法名称,如果返回的是web中的返回值,说明远程访问已经成功。

最后,在libs目录下导入ksoap2-android-assembly-2.4-jar-with-dependencies.jar包,没有libs创建一个,要吧jar包copy进去,不要导进去,导进去有时候不行

注意:在本机发布到IIS中时,访问必须在同一网段,并且关闭本机防火墙。防火墙关闭方法:控制面板--》windows防火墙--》打开或关闭windows防火墙

希望对菜鸟们有用,在远程获取数据时,不可用主线程去操作,要新建一个线程去处理,这里建议看看线程的运行原理和顺序

后期的删除等,我会更新上去,不过这些原理都是一样的,只要懂的增删改查都行