开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:606

当前位置:游戏蛮牛 技术专区 教程分享

查看: 580|回复: 1

[基础知识] 访问数据库 委托事件返回数据

[复制链接]  [移动端链接]
7日久生情
4001/5000
排名
2310
昨日变化
2

1547

主题

1557

帖子

4001

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
42404
威望
0
注册时间
2015-12-24
在线时间
324 小时
最后登录
2017-4-21
发表于 2016-9-8 13:58:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  技术都是慢慢积累的,为了程序的简洁和模块化,我开始喜欢写单例类,这里写了一个访问数据库的单例类,将访问后得到的数据,作为一个委托事件的参数传出去,然后再在其他地方进行处理。因为考虑到会使用中文,这里只写了POST访问。数据库,用的是UPUPW集成工具。

  访问数据库,单例类:

  [csharp] view plain copy

  using UnityEngine;

  using System.Collections;

  public class DataBaseModel

  {

  private static DataBaseModel dataBase;

  /// <summary>

  /// 委托函数

  /// </summary>

  /// <param name="tag">标签</param>

  /// <param name="resultData">获取到数据</param>

  public delegate void ReturnResultData(string tag,string resultData);

  /// <summary>

  /// 事件

  /// </summary>

  public event ReturnResultData getData;

  /// <summary>

  /// php的路径

  /// </summary>

  public string phpPath;

  ///<summary>

  /// 初始化

  /// </summary>

  /// <returns></returns>

  public static DataBaseModel getInstance()

  {

  if (dataBase == null)

  {

  dataBase = new DataBaseModel();

  dataBase.phpPath = "lgxy.hrbu.edu.cn:8080/";

  }

  return dataBase;

  }

  /// <summary>

  /// 将数据库中的数据读出

  /// </summary>

  /// <param name="strValue">变量</param>

  /// <param name="strData">参数</param>

  /// <param name="phpPathName">php文件名</param>

  /// <returns></returns>

  public IEnumerator ReadMySQLData(string[] strValue, string[] strData, string phpName)

  {

  WWWForm wf = new WWWForm();

  for (int i = 0; i < strValue.Length; i++)

  {

  wf.AddField(strValue[i], strData[i]);

  //  path+=("&"+strValue[i]+"="+strData[i]);

  }

  WWW w = new WWW("http://" + phpPath + phpName+"?", wf);

  yield return w;

  if (w.error == null)

  getData(phpName, w.text.Trim());

  }

  /// <summary>

  /// 将数据写入数据库

  /// </summary>

  /// <param name="strValue">变量</param>

  /// <param name="strData">参数</param>

  /// <param name="phpPathName">php文件名,例如:login.php</param>

  /// <returns></returns>

  public IEnumerator WriteMySQLData(string[] strValue, string[] strData, string phpName)

  {

  WWWForm wf = new WWWForm();

  for (int i = 0; i < strValue.Length; i++)

  {

  wf.AddField(strValue[i], strData[i]);

  }

  WWW w = new WWW("http://"+phpPath + phpName+"?", wf);

  yield return w;

  }

  }

  测试类:

  [csharp] view plain copy

  using UnityEngine;

  using System.Collections;

  public class Test : MonoBehaviour {

  void OnEnable()

  {

  //为DataBaseModel的getData事件  添加函数

  DataBaseModel.getInstance().getData += Test_getData;

  }

  void OnDisable()

  {

  DataBaseModel.getInstance().getData -= Test_getData;

  }

  // Use this for initialization

  void Start () {

  //在数据库中写入数据

  string[] strValue = new string[] {"ID","Name"};

  string[] strData = new string[] { "20150101", "赵壹" };

  StartCoroutine(DataBaseModel.getInstance().WriteMySQLData(strValue, strData,"login.php"));

  //在数据库中读取数据

  //在调用ReadMySQLData函数的时候  返回数据 就会执行Test_getData函数

  string[] strNewValue = new string[] { "ID" };

  string[] strNewData = new string[] { "20150101" };

  StartCoroutine(DataBaseModel.getInstance().ReadMySQLData(strNewValue, strNewData, "readInfor.php"));

  }

  // Update is called once per frame

  void Update () {

  }

  /// <summary>

  /// 处理获取的数据

  /// </summary>

  /// <param name="tag">标签,访问的php名称</param>

  /// <param name="resultData">返回的数据</param>

  void Test_getData(string tag, string resultData)

  {

  switch (tag)

  {

  case "readInfor.php":

  Debug.Log("访问readInfor.php获取到的数据");

  break;

  default:

  break;

  }

  }

  }


回复

使用道具 举报

排名
20796
昨日变化
8

0

主题

55

帖子

73

积分

Rank: 2Rank: 2

UID
166985
好友
0
蛮牛币
20
威望
0
注册时间
2016-9-5
在线时间
6 小时
最后登录
2016-11-3
发表于 2016-9-10 00:24:37 | 显示全部楼层
占个位置谢谢

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表