Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务

参考博客:http://blog.csdn.net/zhyl8157121/article/details/8169172

其实在写这篇文章的时候自己才有不到一个月的android开发经历,当队长把数据库这个模块给我的时候也给了我这篇文章的网址,虽然楼主写的很详细,但是博文过去了很长的时间,以及工具的变迁,自己还是琢磨了很长的时间,所以我想根据这次我的切身经历,将楼主的这篇文章做一次更新,记录下这次的经历,同时希望能帮助到一些朋友,小弟才疏学浅,喷子手勿扰!

快速导航

文档目录:

  • Android连接SQLServer详细教程数据库服务器客户端并在微软Azure云上搭建云服务
  • 快速导航
  • 本教程一共有五个部分
    • 一开发环境及工具介绍
    • 二项目说明
    • 三数据库设计
      • 表的定义
      • 建立数据库
        • 一本地数据库
        • 二云数据库Azure云
      • 连接SQL Server数据库
        • 1Microsoft SQL Server Management Studio 2016连上SQL Server数据库后建表
        • 2VS2015连上SQL Server数据库后建表
      • 建表
    • 四Web Server 服务器搭建
      • 新建一个web website项目VS2015新建-项目-web-ASPNET Web 应用程序
      • 在项目中建立一个服务Service1asmx
      • web Server调试
      • 接下来把web server发布到Azure云可选
    • 五客户端android端程序设计
      • 在eclipse中新建一个android项目
      • 在AndroidManifestxml中加入联网权限
      • 程序代码
      • 运行截图

本教程一共有五个部分

  • 一、开发环境及工具介绍
  • 二、项目说明
  • 三、数据库设计
  • 四、服务器端设计
  • 五、客户端(android端)程序设计

一、开发环境及工具介绍

  • 操作系统:Windows 8.1 64bit Peofessnion

    当然这个是什么基本无所谓,只是我是在这上面开发的,而且这次我在开发的时候没有用到博主说的IIS,因为我没有把服务器部署到本地,而是部署到了微软Azure云,可能这样跳过了哪一步。

  • 安卓端:eclipse + ADT集成开发环境

    相信看到这个教程的基本都知道如何做这些了.如果真的是有哪位同学android开发环境没有配置好而来看这篇教程,请先移步->
    http://note.youdao.com/noteshare?id=f2fcf8a5abeb0ecbae77bca6511df44b&sub=F1A47A49BA3F4B20A4BD3747ACF1A1DF

  • 服务器端:VisualStudio 2015 旗舰版+Azure云

    这个是用来写website/webservice的,开发语言使用C# (即.net)

  • 数据库:SQLServer2016+Microsoft SQL Server Management Studio 2016(非必须,因为VS2015可以代替)

    其实这个是什么版本也无所谓吧,教程使用的都是比较基本的东西,所以版本的差异基本可以忽略。但是我还是把它更新到最新的版本,顺应时代的步伐。

  • IIS 7.5:正确配置并开启IIS服务(可选)

    这个我没有部署成功,网上找了很多的例子,都没有成功,错误代码0x80073712,网上很多教程也没有成功,放弃了,在别的电脑上很快就好了,具体参考教程http://jingyan.baidu.com/article/0a52e3f4000e06bf63ed726a.html。
    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第1张图片

二、项目说明

本教程是搭建一个SQL Server数据库,客户端(android端)通过web server 间接访问和操作它。
做一个简单的对用户信息管理的安卓应用,功能包括对用户信息的查看、增加、删除以及登录。

三、数据库设计

1.表的定义:

(具体自己根据情况建立自己的表)表User_Info如图:

user_name user_pass user_sex user_nickname user_age user_phonenumber user_QQ user_weichat
张三 ** 盖伦 12 137——–789 666 weichat
李四 ** 神枪手 18 137——–789 666 weichat
王五 ** 瑞兹 25 137——–789 666 weichat
** ** ** ** ** ** ** **

详细表定义如下(顺序可以不同):
Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第2张图片

表User_Info SQL 代码:

create table User_Info( User_name varchar(20) primary key, User_pass varchar(20) not null, User_age smallint, User_sex Varchar(2), User_nickname Varchar(20), User_phonenumber varchar(11), User_QQnumber varchar(20), User_weichat varchar(20));

表User_Friend如图:

user_name user_Friend user_Remarks
张三 李四 李四皮
王五 张三 张三疯
** ** **

表User_Friend的定义如下:
Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第3张图片

表User_Friend SQL 代码:

create table User_Friend(user_name varchar(20) not null,user_Friend varchar(20),user_Remarks varchar(20));

好了,我们的表就是这个样子了,接下来还是和大家说一下这些事怎么做的吧。

2.建立数据库

这里可以分成两个模块讲,一个是将web server和SQL Server放在本地,搭建本地服务器。二是将web server 和SQL Server放在云服务上,如我用的Azure云。

一、本地数据库

* 操作步骤*

  • 1.启动Microsoft SQL Server Management Studio 2016

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第4张图片

  • 2.连接到数据库

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第5张图片

  • 3.找到Table,右键选择新建一个表:

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第6张图片

如此完成两个表,表User_Info:

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第7张图片
.
.
表User_Friend:
Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第8张图片

二、云数据库(Azure云)

(1)、登录到Azure云官网https://portal.azure.com/#

(2)、在Azure云建立数据库

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第9张图片

接下来填写数据库的信息,注意,这里会用到一个数据库服务,用于远程连接数据库!

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第10张图片

由于博主之前已经在Azure云上建立了一个免费的SQL Server数据库,所以这次建立失败,但建立好后应该如下

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第11张图片

点击**DataBase进入数据库详情

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第12张图片

复制服务器名称下面的网址:

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第13张图片

3.连接SQL Server数据库

(1)Microsoft SQL Server Management Studio 2016连上SQL Server数据库后建表

* 操作步骤*

  • 1).启动Microsoft SQL Server Management Studio 2016

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第14张图片

  • 2).连接到数据库

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第15张图片

  • 3).打开Microsoft SQL Server Management Studio 2016中填写SQL Server连接属性进入数据库

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第16张图片

(2).VS2015连上SQL Server数据库后建表

  • 1).打开VisualStudio 2015 旗舰版,视图->服务器资源管理器

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第17张图片

  • 2).数据连接(弹右键)->添加连接->填写信息->测试连接->确认

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第18张图片

  • 3).至此VS已经连上数据库,并且可以操作数据库(功能和Microsoft SQL Server Management Studio 2016差不多)。

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第19张图片

4.建表

当用VS2015或Microsoft SQL Server Management Studio 2016连接数据库之后就可以建表了

Microsoft SQL Server Management Studio 2016建表

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第20张图片

VS2015建表

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第21张图片

如此完成两个表,表User_Info:

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第22张图片

表User_Friend:

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第23张图片

四、Web Server 服务器搭建

4.新建一个web website项目。VS2015新建->项目->web->ASP.NET Web 应用程序

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第24张图片

下一步

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第25张图片

会出现微软Azure之类的东西,取消,等进度条跑完,项目已经建好,在项目中新建一个类DBOperation。

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第26张图片

复制如下代码:

using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Data.SqlClient;using System.Text.RegularExpressions;using System.Collections;using System.Collections.Generic;namespace God_Pen{    ///     /// 一个操作数据库的类,所有对SQLServer的操作都写在这个类中,使用的时候实例化一个然后直接调用就可以    ///     public class DBOperation : IDisposable    {        public static SqlConnection sqlCon;  //用于连接数据库        //将下面的引号之间的内容换成上面记录下的属性中的连接字符串        //dfasdlfasdfsad        private String ConServerStr = @"Data Source=phonefightingserver.database.windows.net;Initial Catalog=PhoneFightingDataBase;Persist Security Info=True;User ID=PhoneFihtingAdmin;Password=Vr1314520";//Data Source=phonefightingserver.database.windows.net;Initial Catalog=PhoneFightingDataBase;Persist Security Info=True;User ID=PhoneFihtingAdmin;Password=***********        //默认构造函数        public DBOperation()        {            if (sqlCon == null)            {                sqlCon = new SqlConnection();                sqlCon.ConnectionString = ConServerStr;                sqlCon.Open();            }        }        //关闭/销毁函数,相当于Close()        public void Dispose()        {            if (sqlCon != null)            {                sqlCon.Close();                sqlCon = null;            }        }        ///         /// 获取所有用户的信息        ///         /// 所有货物信息        public List selectAllUserList()        {            List list = new List();            try            {                string sql = "select * from User_Info";                SqlCommand cmd = new SqlCommand(sql, sqlCon);                SqlDataReader reader = cmd.ExecuteReader();                while (reader.Read())                {                    //将结果集信息添加到返回向量中,分别是用户ID,用户名,密码                    list.Add(reader[0].ToString());                    list.Add(reader[1].ToString());                    list.Add(reader[2].ToString());                    list.Add(reader[3].ToString());                    list.Add(reader[4].ToString());                    list.Add(reader[5].ToString());                    list.Add(reader[6].ToString());                    list.Add(reader[7].ToString());                }                reader.Close();                cmd.Dispose();            }            catch (Exception)            {            }            return list;        }        ///         /// 增加一条用户信息        ///         /// "User_name">货物名称        /// "User_pass">货物数量        public bool insertUserInfo(string User_name, string User_pass, string User_age, string User_sex, string User_nickname, string User_phonenumber, string User_QQnumber, string User_weichat)        {            try            {                if (User_sex.Equals(""))                    User_sex = "NULL";                else                    User_sex = "\'" + User_sex + "\'";                if (User_nickname.Equals(""))                    User_nickname = "NULL";                else                    User_nickname = "\'" + User_nickname + "\'";                if (User_phonenumber.Equals(""))                    User_phonenumber = "NULL";                else                    User_phonenumber = "\'" + User_phonenumber + "\'";                if (User_QQnumber.Equals(""))                    User_QQnumber = "NULL";                else                    User_QQnumber = "\'" + User_QQnumber + "\'";                if (User_weichat.Equals(""))                    User_weichat = "NULL";                else                    User_weichat = "\'" + User_weichat + "\'";                string sql;                if (User_age.Equals(""))                {                    sql = "insert into User_Info (User_name,User_pass,User_age,User_sex,User_nickname,User_phonenumber,User_QQnumber,User_weichat) values (\'" + User_name + "\',\'" + User_pass + "\'," + "NULL" + "," + User_sex + "," + User_nickname + "," + User_phonenumber + "," + User_QQnumber + "," + User_weichat + ")";                }                else                {                    sql = "insert into User_Info (User_name,User_pass,User_age,User_sex,User_nickname,User_phonenumber,User_QQnumber,User_weichat) values (\'" + User_name + "\',\'" + User_pass + "\'," + Convert.ToInt16(User_age) + "," + User_sex + "," + User_nickname + "," + User_phonenumber + "," + User_QQnumber + "," + User_weichat + ")";                }                SqlCommand cmd = new SqlCommand(sql, sqlCon);                cmd.ExecuteNonQuery();                cmd.Dispose();                return true;            }            catch (Exception)            {                return false;            }        }        ///         /// 删除一条用户信息        ///         /// "User_name">货物编号        public bool deleteUserInfo(string User_name)        {            try            {                string sql = "delete from User_Info where User_name=\'" + User_name + "\'";                SqlCommand cmd = new SqlCommand(sql, sqlCon);                cmd.ExecuteNonQuery();                cmd.Dispose();                return true;            }            catch (Exception)            {                return false;            }        }        ///         /// 用户登录        ///         /// "User_name">货物名称        /// "User_pass">货物数量        public bool UserLogOn(string User_name, string User_pass)        {            try            {                string sql = "select count(User_name) from User_Info where User_name='" + User_name + "' AND User_pass='" + User_pass + "'";                SqlCommand cmd = new SqlCommand(sql, sqlCon);                SqlDataReader reader = cmd.ExecuteReader();                reader.Read();                cmd.Dispose();                //将结果集信息添加到返回向量中,分别是用户ID,用户名,密码                if (reader[0].ToString().Equals("1"))                {                    reader.Close();                    return true;                }                else                {                    reader.Close();                    return false;                }            }            catch (Exception)            {                return false;            }        }    }}

5.在项目中建立一个服务Service1.asmx

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第27张图片

复制如下代码:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;namespace God_Pen{    ///     /// Service1 的摘要说明    ///     [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    // [System.Web.Script.Services.ScriptService]    public class Service1 : System.Web.Services.WebService    {        DBOperation dbOperation = new DBOperation();        [WebMethod]        public string HelloWorld()        {            return "Hello World";        }        [WebMethod(Description = "获取所有用户的信息")]        public string[] selectAllUserInfor()        {            return dbOperation.selectAllUserList().ToArray();        }        [WebMethod(Description = "增加一条用户信息")]        public bool insertUserInfo(string User_name, string User_pass,string User_age,string User_sex,string User_nickname,string User_phonenumber,string User_QQnumber,string User_weichat)        {            return dbOperation.insertUserInfo(User_name, User_pass, User_age, User_sex, User_nickname, User_phonenumber, User_QQnumber, User_weichat);        }        [WebMethod(Description = "删除一条用户信息")]        public bool deleteUserInfo(string User_name)        {            return dbOperation.deleteUserInfo(User_name);        }        [WebMethod(Description = "用户登录")]        public bool UserLogOn(string User_name, string User_pass)        {            return dbOperation.UserLogOn(User_name, User_pass);        }    }}

6.web Server调试

注意,调试前必须确保VS2015连上数据库,不然没法对数据库进行操作,具体回顾前面的教程。
1).运行程序

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第28张图片

2).自动弹出网页

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第29张图片

3).调试

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第30张图片

4).返回结果

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第31张图片

7.接下来,把web server发布到Azure云(可选)

(1)在Azure云网页中建立一个web app服务

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第32张图片

1).填写信息,点击创建

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第33张图片

2).打开Web应用GodPenServer,下载发布配置文件

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第34张图片

3).在VS2015中点击项目,发布

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第35张图片

4).点击导入:

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第36张图片

5).找到配置文件,点击确认,最后点击发布。

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第37张图片

6).等待发布完成,至此,web server部署完成!

五、客户端(android端)程序设计

1.在eclipse中新建一个android项目。

2.在AndroidManifest.xml中加入联网权限

"android.permission.INTERNET" />

3.程序代码

1.MainActivity

package com.VR228.sql;import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import android.app.Activity;  import android.app.Dialog;  import android.os.Bundle;import android.os.StrictMode;import android.view.Gravity;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.Window;  import android.view.WindowManager;  import android.widget.Button;  import android.widget.EditText;  import android.widget.ListView;  import android.widget.SimpleAdapter;  import android.widget.Toast;  public class MainActivity extends Activity{      private Button btn1;      private Button btn2;      private Button btn3;      private Button btn4;      private ListView listView;      private MyAdapter adapter;      private DBUtil dbUtil;      List<MyUser> list = new ArrayList<MyUser>();      @Override      public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          btn1 = (Button) findViewById(R.id.btn_all);          btn2 = (Button) findViewById(R.id.btn_add);          btn3 = (Button) findViewById(R.id.btn_delete);          btn4 = (Button) findViewById(R.id.btn_logon);          listView = (ListView) findViewById(R.id.listView);          dbUtil = new DBUtil();          btn1.setOnClickListener(new OnClickListener() {              /*             * 这是查看所有用户信息的按钮点击事件             *              * */            @Override              public void onClick(View v) {                  hideButton(true);                  setListView();              }          });          btn2.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  hideButton(true);                  setAddDialog();              }          });          btn3.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  hideButton(true);                  setDeleteDialog();              }          });          btn4.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                hideButton(true);                setLogInDialog();            }        });          if(android.os.Build.VERSION.SDK_INT > 9 ){            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();            StrictMode.setThreadPolicy(policy);            }    }      /**      * 设置弹出删除对话框      */      private void setLogInDialog()    {        final Dialog dialog = new Dialog(MainActivity.this);          dialog.setContentView(R.layout.activity_logon);          dialog.setTitle("请输入用户名和密码:");          Window dialogWindow = dialog.getWindow();          WindowManager.LayoutParams lp = dialogWindow.getAttributes();          dialogWindow.setGravity(Gravity.CENTER);          dialogWindow.setAttributes(lp);          final EditText cNoEditText = (EditText) dialog.findViewById(R.id.editText11);          final EditText cNoEditText2 = (EditText) dialog.findViewById(R.id.editText12);          Button btnConfirm = (Button) dialog.findViewById(R.id.button11);          Button btnCancel = (Button) dialog.findViewById(R.id.button12);          btnConfirm.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  String name=cNoEditText.getText().toString();                String pass=cNoEditText2.getText().toString();                if(name.isEmpty()||pass.isEmpty())                {                    Toast.makeText(MainActivity.this, "用户名和密码都不能为空!", Toast.LENGTH_SHORT).show();                  }                else                {                    if(dbUtil.UserLogIn(name,pass))                        Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_SHORT).show();                      else                        Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_SHORT).show();                      dialog.dismiss();                      hideButton(false);                  }            }          });          btnCancel.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  dialog.dismiss();                  hideButton(false);              }          });          dialog.show();      }    private void setDeleteDialog() {          final Dialog dialog = new Dialog(MainActivity.this);          dialog.setContentView(R.layout.dialog_delete);          dialog.setTitle("输入想要删除的用户名");          Window dialogWindow = dialog.getWindow();          WindowManager.LayoutParams lp = dialogWindow.getAttributes();          dialogWindow.setGravity(Gravity.CENTER);          dialogWindow.setAttributes(lp);          final EditText cNoEditText = (EditText) dialog.findViewById(R.id.editText1);          Button btnConfirm = (Button) dialog.findViewById(R.id.button1);          Button btnCancel = (Button) dialog.findViewById(R.id.button2);          btnConfirm.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  if(dbUtil.deleteUserInfo(cNoEditText.getText().toString()))                    Toast.makeText(MainActivity.this, "成功删除数据!", Toast.LENGTH_SHORT).show();                  else                    Toast.makeText(MainActivity.this, "删除数据失败!", Toast.LENGTH_SHORT).show();                  dialog.dismiss();                  hideButton(false);              }          });          btnCancel.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  dialog.dismiss();                  hideButton(false);              }          });          dialog.show();      }      /**      * 设置弹出添加对话框      */      private void setAddDialog() {          final Dialog dialog = new Dialog(MainActivity.this);          dialog.setContentView(R.layout.dialog_add);          dialog.setTitle("输入添加的用户信息");          Window dialogWindow = dialog.getWindow();          WindowManager.LayoutParams lp = dialogWindow.getAttributes();          dialogWindow.setGravity(Gravity.CENTER);          dialogWindow.setAttributes(lp);          final EditText User_nameEditText = (EditText) dialog.findViewById(R.id.editText1);          final EditText User_passEditText = (EditText) dialog.findViewById(R.id.editText2);          final EditText User_ageEditText = (EditText) dialog.findViewById(R.id.editText3);          final EditText User_sexEditText = (EditText) dialog.findViewById(R.id.editText4);          final EditText User_nicknameEditText = (EditText) dialog.findViewById(R.id.editText5);          final EditText User_phonenumberEditText = (EditText) dialog.findViewById(R.id.editText6);          final EditText User_QQnumberEditText = (EditText) dialog.findViewById(R.id.editText7);          final EditText User_weichatEditText = (EditText) dialog.findViewById(R.id.editText8);          Button btnConfirm = (Button) dialog.findViewById(R.id.button1);          Button btnCancel = (Button) dialog.findViewById(R.id.button2);          btnConfirm.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  String user_name=User_nameEditText.getText().toString();                String user_pass=User_passEditText.getText().toString();                String User_age=User_ageEditText.getText().toString();                String User_sex=User_sexEditText.getText().toString();                String User_nickname=User_nicknameEditText.getText().toString();                String User_phonenumber=User_phonenumberEditText.getText().toString();                String User_QQnumber=User_QQnumberEditText.getText().toString();                String User_weichat=User_weichatEditText.getText().toString();                if(user_name.isEmpty()||user_pass.isEmpty())                {                    Toast.makeText(MainActivity.this, "用户名和密码不能为空!", Toast.LENGTH_SHORT).show();                }                else                {                    if(dbUtil.insertUserInfo(user_name,user_pass,User_age,User_sex,User_nickname,User_phonenumber,User_QQnumber,User_weichat))                        Toast.makeText(MainActivity.this, "成功添加用户", Toast.LENGTH_SHORT).show();                      else                        Toast.makeText(MainActivity.this, "添加用户失败,请检查输入!", Toast.LENGTH_SHORT).show();                      dialog.dismiss();                    hideButton(false);                }            }          });        btnCancel.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  dialog.dismiss();                  hideButton(false);              }          });          dialog.show();      }    /**      * 设置listView      */      private void setListView() {          listView.setVisibility(View.VISIBLE);          list.clear();        list.add(new MyUser("用户名", "密码", "年龄" , "性别", "昵称", "电话", "QQ号", "微信"));        list.addAll(dbUtil.getAllUser_Info());  //将得到的用户数据存在listadapter = new MyAdapter(this);        adapter.setItemData(list);        listView.setAdapter(adapter);      }      /**      * 设置button的可见性      */      private void hideButton(boolean result) {          if (result) {              btn1.setVisibility(View.GONE);              btn2.setVisibility(View.GONE);              btn3.setVisibility(View.GONE);             btn4.setVisibility(View.GONE);        } else {              btn1.setVisibility(View.VISIBLE);              btn2.setVisibility(View.VISIBLE);              btn3.setVisibility(View.VISIBLE);              btn4.setVisibility(View.VISIBLE);        }      }    /**      * 返回按钮的重写      */      @Override      public void onBackPressed()      {          if (listView.getVisibility() == View.VISIBLE) {              listView.setVisibility(View.GONE);              hideButton(false);          }else {              MainActivity.this.finish();          }      }  }  

2.HttpConnSoap

package com.VR228.sql;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;/**  * 连接webservice的类  *  * @author Bottle  *  * @Date 2013-3-19 下午10:01:21  */  public class HttpConnSoap {    /**      * 获取返回的InputStream,为了增强通用性,在方法内不对其进行解析。      *      * @param methodName      *            webservice方法名      * @param Parameters      *            webservice方法对应的参数名      * @param ParValues      *            webservice方法中参数对应的值      * @return 未解析的InputStream      */      public String GetWebServre (String methodName, ArrayList Parameters, ArrayList ParValues)      {        //指定URL地址,我这里使用的是常量。          //如:String ServerUrl = "http://10.0.2.2:11125/Service1.asmx";        String ServerUrl = "http://godpenserver.azurewebsites.net/Service1.asmx";         //soapAction = 命名空间 + 方法名          String soapAction = "http://tempuri.org/" + methodName;        //拼凑requestData          String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"                        + ""                        + "";        String tps, vps, ts;        String mreakString = "";        mreakString = "<" + methodName + " xmlns=\"http://tempuri.org/\">";        for (int i = 0; i < Parameters.size(); i++)          {            tps = Parameters.get (i).toString();            //设置该方法的参数为.net webService中的参数名称              vps = ParValues.get (i).toString();            ts = "<" + tps + ">" + vps + " + tps + ">";            mreakString = mreakString + ts;        }        mreakString = mreakString + " + methodName + ">";        String soap2 = "";        String requestData = soap + mreakString + soap2;        System.out.println(requestData);        //其上所有的数据都是在拼凑requestData,即向服务器发送的数据        try          {            URL url = new URL (ServerUrl); //指定服务器地址  //          URL url = new URL("http://www.baidu.com/img/baidu_jgylogo1.gif");             HttpURLConnection con = (HttpURLConnection) url.openConnection();//打开链接              byte[] bytes = requestData.getBytes ("utf-8"); //指定编码格式,可以解决中文乱码问题              con.setDoInput (true); //指定该链接是否可以输入              con.setDoOutput (true); //指定该链接是否可以输出              con.setUseCaches (false); //指定该链接是否只用caches              con.setConnectTimeout (6000); // 设置超时时间              con.setRequestMethod ("POST"); //指定发送方法名,包括Post和Get。              con.setRequestProperty ("Content-Type", "text/xml;charset=utf-8"); //设置(发送的)内容类型              con.setRequestProperty ("SOAPAction", soapAction); //指定soapAction              con.setRequestProperty ("Content-Length", "" + bytes.length); //指定内容长度              //发送数据              OutputStream outStream = con.getOutputStream();            outStream.write (bytes);            outStream.flush();            System.out.println("发送数据成功");            outStream.close();            System.out.println("获取数据");            //获取数据              InputStream inputStream;            if(con.getResponseCode()==HttpURLConnection.HTTP_OK)            {                inputStream = con.getInputStream();                 System.out.println("正常获取数据输入流成功InputStream:"+inputStream.toString());            }            else            {                inputStream = con.getErrorStream();                System.out.println("异常获取数据输入流成功InputStream:"+inputStream.toString());            }            String Data=new String("");            byte[] b = new byte[4096];            for (int n; (n = inputStream.read(b)) != -1;) {                final String s1 = new String(b, 0, n);                Data=Data+s1;                System.out.println("读取一次");            }            System.out.println("读取成功");            return Data;//返回从服务器接收到的数据            /**              * 此类到此结束了,比原来的HttpConnSoap还短,因为这里没有对返回的数据做解析。数据完全都保存在了inputStream中。              * 而原来的类是将数据解析成了ArrayList              * 格式返回。显然,这样无法解决我们上面的需求(返回值是复杂类型的List)              */        }        catch (Exception e)          {            e.printStackTrace();            return null;        }    }}

3.DBUtil

package com.VR228.sql;import java.sql.Connection;import java.sql.DriverManager;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class DBUtil {    private ArrayList<String> arrayList = new ArrayList<String>();    private ArrayList<String> brrayList = new ArrayList<String>();    private HttpConnSoap Soap = new HttpConnSoap();    List<MyUser> list=new ArrayList<MyUser>();    //以下这个函数没有用    public static Connection getConnection() {        Connection con = null;        try {            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动直连模式            con=DriverManager.getConnection("jdbc:sqlserver://phonefightingserver.database.windows.net;database=PhoneFightingDataBase","PhoneFihtingAdmin","Vr1314520");//          System.out.print(con.toString());        } catch (Exception e) {            //e.printStackTrace();            System.out.print("连接服务器失败");        }        return con;    }    /**     * 获取所有货物的信息     *      * @return     */    public List<MyUser> getAllUser_Info() {        arrayList.clear();        brrayList.clear();        String Data = Soap.GetWebServre("selectAllUserInfor", arrayList, brrayList);        return AnalizeResultAllUser_Info(Data,"selectAllUserInfor");//      return null;    }    /**     * 增加一条用户信息     *      * @return     */    public boolean insertUserInfo(String User_name, String User_pass, String User_age, String User_sex, String User_nickname, String User_phonenumber, String User_QQnumber, String User_weichat) {        arrayList.clear();        brrayList.clear();        arrayList.add("User_name");        arrayList.add("User_pass");        arrayList.add("User_age");        arrayList.add("User_sex");        arrayList.add("User_nickname");        arrayList.add("User_phonenumber");        arrayList.add("User_QQnumber");        arrayList.add("User_weichat");        brrayList.add(User_name);        brrayList.add(User_pass);        brrayList.add(User_age);        brrayList.add(User_sex);        brrayList.add(User_nickname);        brrayList.add(User_phonenumber);        brrayList.add(User_QQnumber);        brrayList.add(User_weichat);        ;//从这个返回处理的结果xml文件        return AnalizeResultTrueorFalse(Soap.GetWebServre("insertUserInfo", arrayList, brrayList),"insertUserInfo");    }    /**     * 删除一条用户信息     *      * @return     */    public boolean deleteUserInfo(String User_name) {        arrayList.clear();        brrayList.clear();        arrayList.add("User_name");        brrayList.add(User_name);        return AnalizeResultTrueorFalse(Soap.GetWebServre("deleteUserInfo", arrayList, brrayList),"deleteUserInfo");    }    /*     * 用户登录     */    public boolean UserLogIn(String User_name,String User_pass) {        arrayList.clear();        brrayList.clear();        arrayList.add("User_name");        brrayList.add(User_name);        arrayList.add("User_pass");        brrayList.add(User_pass);        return AnalizeResultTrueorFalse(Soap.GetWebServre("UserLogOn", arrayList, brrayList),"UserLogOn");    }    /*     * 对添加和删除用户信息回馈的xml文件进行分析,返回数据库执行结果     */    private boolean AnalizeResultTrueorFalse(String data,String method)    {        int position=data.indexOf(method+"Result");        if(position>0)        {            int end=data.indexOf('/'+method+"Result");            String Result=data.substring(position+method.length()+7, end-1);            System.out.println(Result);            if(Result.equals("true"))                return true;        }        return false;    }    private List<MyUser> AnalizeResultAllUser_Info(String data,String method)    {        System.out.println("开始分析!");        list.clear();        int start=data.indexOf(method+"Result");        int end=data.indexOf('/'+method+"Result");        String Result=data.substring(start+method.length()+8, end-1);        System.out.println(Result);        String RR[]=Result.split("><");        MyUser myuser;        String myResult;        for(int i=0;i8)        {            myuser=new MyUser();            for(int j=0;j<8;j++)            {                System.out.println(RR[i+j]);                if(RR[i+j].startsWith("string>"))                {                    myResult=RR[i+j].substring(7, RR[i+j].indexOf("));                }                else                {                    myResult="NULL";                }                switch(j)                {                    case 0:myuser.SetUser_name("用户"+i/8+":"+myResult);break;                    case 1:myuser.SetUser_pass(myResult);break;                    case 2:myuser.SetUser_age(myResult);break;                    case 3:myuser.SetUser_sex(myResult);break;                    case 4:myuser.SetUser_nickname(myResult);break;                    case 5:myuser.SetUser_phonenumber(myResult);break;                    case 6:myuser.SetUser_QQnumber(myResult);break;                    case 7:myuser.SetUser_weichat(myResult);break;                }            }            list.add(myuser);        }        return list;    }}

4.MyAdapter

package com.VR228.sql;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter {    private List<MyUser> list;    private LayoutInflater inflater;    public MyAdapter(Context context) {        inflater = LayoutInflater.from(context);    }    //设置好要显示的每一个item对应的数据,当数据不恰当时对数据进行纠错、    public void setItemData(List list) {        this.list = list;//      for (int i = list.size() - 1; i >= 0; i--) {//          final MyUser sipper = list.get(i);//      }        notifyDataSetInvalidated();    }    @Override    public int getCount() {        return list == null ? 0 : list.size();    }    @Override    public MyUser getItem(int position) {        return list == null ? null : list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    //设置好每一个item的内容,具体是怎么调用的暂时不清楚    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        Holder holder;        if (convertView == null) {            holder = new Holder();            //在这里为item指定一个layout文件,layout文件中的控件将显示在每一个item中            convertView = inflater.inflate(R.layout.adapter_item, null);            holder.User_name = (TextView) convertView.findViewById(R.id.User_name);            holder.User_pass = (TextView) convertView.findViewById(R.id.User_pass);            holder.User_age = (TextView) convertView.findViewById(R.id.User_age);            holder.User_sex = (TextView) convertView.findViewById(R.id.User_sex);            holder.User_nickname = (TextView) convertView.findViewById(R.id.User_nickname);            holder.User_phonenumber = (TextView) convertView.findViewById(R.id.User_phonenumber);            holder.User_QQnumber = (TextView) convertView.findViewById(R.id.User_QQnumber);            holder.User_weichat = (TextView) convertView.findViewById(R.id.User_weichat);            convertView.setTag(holder);        } else {            holder = (Holder) convertView.getTag();        }        //指定layout中控件显示的内容        MyUser sipper = getItem(position);        holder.User_name.setText(sipper.getUser_name());        holder.User_pass.setText(sipper.getUser_pass());        holder.User_age.setText(sipper.getUser_age());        holder.User_sex.setText(sipper.getUser_sex());        holder.User_nickname.setText(sipper.getUser_nickname());        holder.User_phonenumber.setText(sipper.getUser_phonenumber());        holder.User_QQnumber.setText(sipper.getUser_QQnumber());        holder.User_weichat.setText(sipper.getUser_weichat());        return convertView;    }    class Holder {        TextView User_name;        TextView User_pass;        TextView User_age;        TextView User_sex;        TextView User_nickname;        TextView User_phonenumber;        TextView User_QQnumber;        TextView User_weichat;    }}

5.MyUser

package com.VR228.sql;public class MyUser {    private String User_name;    private String User_pass;    private String User_age;    private String User_sex;    private String User_nickname;    private String User_phonenumber;    private String User_QQnumber;    private String User_weichat;    public void SetUser_name(String name)    {        User_name=name;    }    public void SetUser_pass(String pass)    {        User_pass=pass;    }    public void SetUser_age(String age)    {        User_age=age;    }    public void SetUser_sex(String sex)    {        User_sex=sex;    }    public void SetUser_nickname(String nickname)    {        User_nickname=nickname;    }    public void SetUser_phonenumber(String phonenumber)    {        User_phonenumber=phonenumber;    }    public void SetUser_QQnumber(String QQnumber)    {        User_QQnumber=QQnumber;    }    public void SetUser_weichat(String weichat)    {        User_weichat=weichat;    }    public String getUser_name()    {        return User_name;    }    public String getUser_pass()    {        return User_pass;    }   public String getUser_age()    {        return User_age;    }   public String getUser_sex()    {        return User_sex;    }   public String getUser_nickname()    {        return User_nickname;    }   public String getUser_phonenumber()    {        return User_phonenumber;    }   public String getUser_QQnumber()    {        return User_QQnumber;    }   public String getUser_weichat()    {        return User_weichat;    }    public MyUser(String User_name,String User_pass,String User_age,String User_sex,String User_nickname,String User_phonenumber,String User_QQnumber,String User_weichat)    {        this.User_name=User_name;        this.User_pass=User_pass;        this.User_age=User_age;        this.User_sex=User_sex;        this.User_nickname=User_nickname;        this.User_phonenumber=User_phonenumber;        this.User_QQnumber=User_QQnumber;        this.User_weichat=User_weichat;    }    public MyUser()    {    }}

6.activity_main.xml

"http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    "@+id/listView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:visibility="gone" >        

7.adapter_item.xml

<?xml version="1.0" encoding="utf-8"?>  "http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:descendantFocusability="blocksDescendants"      android:gravity="center" >      "@+id/classroom_detail_item_tableRow"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:gravity="center" >        "@+id/User_name"            android:layout_width="80dp"            android:layout_height="wrap_content"            android:gravity="center"            android:height="40dp"            android:textSize="14sp" />        "@+id/User_pass"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                    "@+id/User_age"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                            "@+id/User_sex"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                        "@+id/classroom_detail_item_tableRow2"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:gravity="center" >        "@+id/User_nickname"            android:layout_width="80dp"            android:layout_height="wrap_content"            android:gravity="center"            android:height="40dp"            android:textSize="14sp" />        "@+id/User_phonenumber"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                    "@+id/User_QQnumber"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                      "@+id/User_weichat"              android:layout_width="80dp"              android:layout_height="wrap_content"              android:gravity="center"              android:height="40dp"              android:textSize="14sp" >                   

8.dialog_add.xml

<?xml version="1.0" encoding="utf-8"?>  "http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >      "@+id/editText1"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint1" >                      "@+id/editText2"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint2" />      "@+id/editText3"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint3"          android:inputType="number" />      "@+id/editText4"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint4"/>      "@+id/editText5"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint5" />     "@+id/editText6"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint6"          android:inputType="number" />      "@+id/editText7"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint7"          android:inputType="number" />      "@+id/editText8"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/add_hint8"/>      "fill_parent"          android:layout_height="wrap_content"          android:orientation="horizontal" >          

9.dialog_delete.xml

<?xml version="1.0" encoding="utf-8"?>  "http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >      "@+id/editText1"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:ems="10"          android:hint="@string/delete_hint" >                      "fill_parent"          android:layout_height="wrap_content"          android:orientation="horizontal" >          

10.strings.xml

      "app_name">数据库测试      "menu_settings">Settings      "title_activity_main">SQL Server      "btn1">查看所有用户信息      "btn2">增加一条用户信息      "btn3">删除一条用户信息      "btn4">用户登录      "add_hint1">输入添加的用户名      "add_hint2">输入用户密码      "add_hint3">输入用户年龄      "add_hint4">输入用户性别      "add_hint5">输入用户昵称      "add_hint6">输入用户电话      "add_hint7">输入用户QQ号      "add_hint8">输入用户微信号      "add_hint9">输入用户密码      "confirm">确定      "cancel">取消      "delete_hint">输入删除的用户名      "action_settings">null   

11.Manifest.xml

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    package="com.VR228.sql"    android:versionCode="1"    android:versionName="1.0" >    "14"        android:targetSdkVersion="21" />    "android.permission.INTERNET" />      "true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.NoTitleBar" >        ".MainActivity"            android:label="@string/title_activity_main"             android:screenOrientation="portrait">                            "android.intent.action.MAIN" />                "android.intent.category.LAUNCHER" />                        

说明:可能对于新手来说我把android客户端改的是复杂了一点,主要是把ListView的加上去了,代码可以复制粘贴直接运行,后面我也有demo提供下载。

4.运行截图

1.主界面

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第38张图片

2.查看所有用户信息

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第39张图片

3.增加用户

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第40张图片

4.删除用户

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第41张图片

5.登录

Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务_第42张图片

先这样,有什么问题可以给我发邮件 [email protected]
对了,博主后面想做一款安卓后端,主要是用来进行游戏的在线pk,有这方面的技术的欢迎给我发邮件,我们一起探讨,谢谢!
有不足的地方欢迎指正,喷子手勿喷!

谢谢您的支持,欢迎大家批评指正。

最后,老规矩,给出参考源代码:链接:http://pan.baidu.com/s/1mix7fgG 密码:zdfl

更多相关文章

  1. Android数据库操作--greenDAO的入门使用
  2. Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase
  3. DIY新浪微博Android手机客户端(一)(二)(三)完
  4. Android轻量型数据库SQLite详解
  5. Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase
  6. Android数据库加密
  7. Android 数据库SQLite的使用简单Demo

随机推荐

  1. Android(安卓)主题(Theme)实现
  2. Android(安卓)ScrollView 中 TextView 多
  3. Android(安卓)横屏时禁止输入法全屏
  4. Android环境配置
  5. 【按键】灭屏后瞬间按返回键,可以点亮屏幕
  6. Android中的动画详解系列【1】——逐帧动
  7. android的单元测试
  8. Android(安卓)判断SD卡是否存在及容量查
  9. Android--ListView滑动时出现黑屏解决方
  10. Android(安卓)aapt 工具介绍(转载)