Android Studio使用webservice远程访问数据库SQL Server 2008 R2

本文介绍了在Android Studio中使用webservice远程访问SQL Server 2008 R2数据库的方法,涉及ksoap2和GSON的使用。详细步骤包括设置开发环境、在Visual Studio创建Web服务、Android端调用webservice并处理数据。重点讨论了Android Studio的AsyncTask异步处理和数据转换。
摘要由CSDN通过智能技术生成

首先说一下背景,由于目前个人自学Android Studio,参考度娘实现连接DB的方式,总结出目前主流的两种方式:
1)使用jtds直接访问DB数据库(参考:https://blog.csdn.net/feidie436/article/details/77532194/)方式
2)另外一种就是比较主流的以webservice方式进行远程访问数据库,使用ksoap2进行数据读取及GSON进行数据解析
但是jtds目前有点弊端,建议局域网,少数人使用。所以这次主要以Android Studio+webservice+ksoap2+GSON的方式读取数据进行总结归纳
开发环境
1、windows 10专业版本X64(破解版,需要安装IIS,度娘上面有很多安装IIS的教程)
2、Visual Studio 2013旗舰版(又是盗版,穷逼一个,需要进行部署webservice)
3、Android Studio(这个是正版,需要ksoap2-android-assembly-3.6.4-jar-with-dependencies.jar(这个需要自己下载,可以进行ksoap2的官网下载,CSDN的资源下载太贵,伤不起,然后放在android项目libs目录下导入Android Studio到)和导入Android Studio自带的com.google.code.gson:gson2.8.5和GsonFormat,度娘上面有很多如何从Android Studio自动添加gson和GsonFormat的方法,这边就不细说了,另外gson的版本可能不一样,但是我现在Android Studio3.3.2的自带是gson2.8.5,这些都不重要,用法都是一样的,另外还需用到AsyncTask异步多线程,Android 不能在主线程直接访问数据库,必须用到异步才能进行)
4、SQL Server 2008 R2版本的(网上找的破解版,挺好用的)
实现逻辑
第一步:安装SQL Server 2008 R2,Visual Studio 2013,Android Studio
因为是盗版的windows系统,在安装系统环境的时候遇到各种问题,比如windows没有IIS组件,比如在运行Visual Studio 2013的时候报错:内存被占用,最坑的一次是,什么都安装完了,还免费激活400年…结果第3天,系统变未激活,系统还原初始状态,系统Patch参数全部清空,SQL Server 2008 R2及多个软件不能启动…不过还好,最后终于找到一个系统版本,免费激活180天的,一直用到了现在,所以想吐槽一下,那些GHOST系统版本的,能不能不要精简了。
在这里插入图片描述
第二步:Visual Studio 2013创建个空网站,新建webserver服务,访问及操作数据库
1)Visual Studio 2013新建一个空白网站
在这里插入图片描述
2)新建项目->Web服务(ASMX)
在这里插入图片描述
3)配置Web.config
add name=“conn_data” connectionString=“server=.;database=testDB;user id=sa;password=618531;Max Pool Size=50000;Min Pool Size=2;Pooling=true;Connect Timeout=60000;” providerName=“System.Data.SqlClient”
在这里插入图片描述
4)编写SQLHelper.cs文件用来进行数据库操作

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DBUtility
{
///
/// 数据库访问类,
///
public class SQLHelper
{
#region 全局变量定义
private static SQLHelper sqldb;
///
/// 定义数据库链接字符串
///
private string sqlConnStr = “”;
private SqlConnection con;
#endregion

    #region <!------------------SQlhelper对象重载------------------->
    /// <summary>
    /// 根据默认连接字符串实例化
    /// </summary>
    public SQLHelper()
    {
        sqlConnStr = System.Configuration.ConfigurationManager.ConnectionStrings["conn_data"].ToString();
    }
    /// <summary>
    /// 根据指定数据库链接字符串实例化
    /// </summary>
    /// <param name="connectionName">指定数据库链接字符串值</param>
    public SQLHelper(string connectionName)
    {
        sqlConnStr = System.Configuration.ConfigurationManager.ConnectionStrings[connectionName].ToString();
    }
    #endregion

    #region <!------------------返回一个SlqHelper类的实例------------------->
    /// <summary>
    /// 创建SqlHelper的对象(默认数据库链接connName=conn_data)
    /// </summary>
    /// <returns>sqlhelper实例</returns>
    public static SQLHelper CreateSQLHelper()
    {
        
        if (sqldb == null)
        {
            sqldb = new SQLHelper();
            return sqldb;
        }
        else
        {
            return sqldb;
        }
    }
    /// <summary>
    /// 创建SqlHelper的对象(指定数据库链接connName=自定义的非'conn_data')
    /// </summary>
    /// <param name="connectionName">数据库链接字符串在config中的键值名称</param>
    /// <returns>sqlhelper实例</returns>
    public static SQLHelper CreateSQLHelper(string connectionName)
    {
        //如需要用到,可能会修改对象名,否则无法真正重载此函数(sqldb不为空)
        if (sqldb == null)
        {
            sqldb = new SQLHelper(connectionName);
            return sqldb;
        }
        else
        {
            return sqldb;
        }
    }
    #endregion

    #region  <!------------------连接数据库 获得一个sqlconnection的连接 及数据库链接操作------------------->
    /// <summary>
    /// 连接数据库对象及数据库链接操作
    /// </summary>
    public SqlConnection CreateConnecton()
    {
        string connstr = sqlConnStr;// System.Configuration.ConfigurationManager.ConnectionStrings["conn_data"].ToString();
        try
        {
            con = new SqlConnection(connstr);
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        return con;
    }
    /// <summary>
    /// 打开数据库链接
    /// </summary>
    private void ConnOpen()
    {
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }
    }
    /// <summary>
    /// 关闭数据库链接 同时释放sqlconnection资源
    /// </summary>
    private void ConnClose()
    {
        if (con.State == ConnectionState.Open)
        {
            con.Close();
            con.Dispose();
        }
        else
        {
            con.Dispose();
        }
    }
    #endregion

    #region <!------------------数据库的增、删、改更新操作------------------->
    #region <!------------------sql语句执行------------------->
    /// <summary>
    /// 执行不带参数的sql语句,更新数据库返回受影响的行数
    /// </summary>
    /// <param name="cmdText">T-SQL语句</param>
    /// <returns></returns>
    public int TSQLExecuteNonQuery(string cmdText)
    {
        return TSQLExecuteNonQuery(cmdText, null);
    }   

    /// <summary>
    /// 执行带参数的sql语句,更新数据库返回受影响的行数
    /// </summary>
    /// <param name="cmdText">T-SQL语句</param>
    /// <param name="commandParameters">一组用于执行命令的参数</param>
    /// <returns></returns>
    public int TSQLExecuteNonQuery(string cmdText, params SqlParameter[] commandParameters)
    {
        int val = 0;
        try
        {
            SqlCommand cmd = new SqlCommand();
            using (SqlConnection conn=CreateConnecton())
            {
                //conn = CreateConnecton();
                PrepareCommand(cmd, null, CommandType.Text, cmdText, commandParameters,conn);
                val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }
        catch(SqlException ex)
        {
            //ConnClose();
            throw ex;
        }
        return val;
    }
    #endregion

    #region <!------------------存储过程执行------------------->
    /// <summary>
    /// 执行不带参数的存储过程,更新数据库并返回受影响的行数
    /// </summary>
    /// <param name="cmdText">存储过程名称</param>
    /// <returns>返回受影响的行数</returns>
    public int PROCExecuteNonQuery(string procName)
    {
        return PROCExecuteNonQuery(procName,null,null);
    }
    /// <summary>
    /// 执行带参数的存储过程,更新数据库并返回受影响的行数
    /// </summary>
    /// <param name="cmdText">存储过程名称</param>
    /// <param name="commandParameters">一组用于执行命令的参数</param>
    /// <returns>返回受影响的行数</returns>
    public int PROCExecuteNonQuery(string procName, params SqlParameter[] commandParameters)
    {
        return PROCExecuteNonQuery(procName, 0, commandParameters);
    }
    /// <summary>
    /// 执行带参数的存储过程,更新数据库并返回受影响的行数
    /// </summary>
    /// <param name="cmdText">存储过程名称</param>
    /// <param name="times">设置执行存储过程的时间 单位(秒)</param>
    /// <param name="commandParameters">一组用于执行命令的参数</param>
    /// <returns>返回受影响的行数</returns>
    public int PROCExecuteNonQuery(string procName,int times, params SqlParameter[] commandParameters)
    {
        int val = 0;
        try
        {
            SqlCommand cmd = new SqlCommand();
            using (SqlConnection conn = CreateConnecton())
            {
                
                PrepareCommand(cmd, null, CommandType.StoredProcedure, procName, commandParameters,times,conn);
                val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }
        catch (SqlException ex)
        {
            //ConnClose();
            throw ex;
        }
        return val;
    }
    #endregion
   
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值