Unity3D实现MySql数据库登录与注册功能

一、搭建测试界面

1、界面布局如下:
在这里插入图片描述
2、界面控件
在这里插入图片描述

二、代码实现

1、封装MySql

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
using UnityEngine.Events;
using System.Data;
/// <summary>
/// MySql工具类
/// </summary>
public class MySqlTool
{
    /// <summary>
    /// 单例
    /// </summary>
    public static MySqlTool Instance;
    /// <summary>
    /// 路径
    /// </summary>
    public static string conPath = "Database=testdatabase;datasource=localhost;port=3306;user=root;password=123456;";
    /// <summary>
    /// 连接实例
    /// </summary>
    public static MySqlConnection con;
    /// <summary>
    /// 获取MySqlTool工具实例
    /// </summary>
    /// <returns></returns>
    public static MySqlTool GetInstance()
    {
        if(Instance==null)  
            Instance = new MySqlTool();
        return Instance;
    }
    /// <summary>
    /// 初始化时打开数据库
    /// </summary>
    public MySqlTool()
    {
        GetConnect();
    }
    /// <summary>
    /// 获取连接实例
    /// </summary>
    public void GetConnect()
    {
        try
        {
            if(con.State!=ConnectionState.Open)
            {
                con.Open();
            }     
        }
        catch(System.Exception e)
        {
            Debug.Log("服务器打开失败:"+e.Message.ToString());//有错则报出错误
        }    
    }
    /// <summary>
    /// 关闭连接
    /// </summary>
    private void Close()
    {
        if(con!=null)
        {
            con.Close();
        }
    }
    /// <summary>
    /// 获取数据读取实例
    /// </summary>
    public MySqlDataReader GetReader(string tableName)
    {
        GetConnect();
        try
        {
            string selectStatement = "select*from " + tableName;
            MySqlCommand cmd = new MySqlCommand(selectStatement,con);
            MySqlDataReader reader = cmd.ExecuteReader();
            return reader;
        }
        catch (System.Exception e)
        {
            Debug.Log("错误:"+e.Message.ToString());
            return null;
        }   
    }
    /// <summary>
    /// 执行Sql语句
    /// </summary>
    /// <param name="com"></param>
    private void ExecuteSql(string sqlCom)
    {
        GetConnect();
        try
        {
            MySqlCommand cmd = new MySqlCommand(sqlCom,con);
            cmd.ExecuteNonQuery();
        }
        catch (System.Exception e)
        {
            Debug.Log("错误:"+e.Message.ToString());
        }
        finally
        {
            Close();
        }
    }
    /// <summary>
    /// 插入新用户
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="userName">新的用户名</param>
    /// <param name="password">新密码</param>
    public void InsertUser(string tableName,string userName,string password)
    {
        string connstr = "insert into " + tableName + "(userName,password) values ('" + userName + "','" + password + "')";
        ExecuteSql(connstr);
    }
    }

2、编写登录、注册功能脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using MySql.Data.MySqlClient;
/// <summary>
/// 登录注册页
/// </summary>
public class LoginPanel : MonoBehaviour
{
    /// <summary>
    /// 姓名、密码
    /// </summary>
    public InputField nameInput, passwordInput;
    /// <summary>
    /// 登录、注册、确定登录、确定注册
    /// </summary>
    public Button loginBtn, registerBtn, sureLoginBtn, sureRegisterBtn;
    /// <summary>
    /// 用户信息(名字、密码)字典
    /// </summary>
    private Dictionary<string, string> userDic = new Dictionary<string, string>();
    /// <summary>
    /// 数据读取实例
    /// </summary>
    private MySqlDataReader reader;
    void Start()
    {
        //按钮添加监听
        loginBtn.onClick.AddListener(delegate 
        {
            sureLoginBtn.gameObject.SetActive(true);
            sureRegisterBtn.gameObject.SetActive(false);
        });
        registerBtn.onClick.AddListener(delegate 
        {
            sureRegisterBtn.gameObject.SetActive(true);
            sureLoginBtn.gameObject.SetActive(false);
        });
        sureLoginBtn.onClick.AddListener(delegate 
        {
            OnLogin(nameInput.text,passwordInput.text);
        });
        sureRegisterBtn.onClick.AddListener(delegate
        {
            OnRegister(nameInput.text, passwordInput.text);
        });
    }
    /// <summary>
    /// 读取用户表中的数据
    /// </summary>
    private void ReadUserTable()
    {
        userDic.Clear();
        reader = MySqlTool.Instance.GetReader("user");//user为用户表名
        while(reader.Read())
        {
            string userName = reader.GetString("userName");//userName为user表中的姓名字段
            string password = reader.GetString("password");//password为user表中的密码字段
            userDic.Add(userName,password);
        }
        reader.Close();
    }
    /// <summary>
    /// 登录
    /// </summary>
    /// <param name="inputName">输入的用户名</param>
    /// <param name="inputPassword">输入的密码</param>
    private void OnLogin(string inputName,string inputPassword)
    {
        ReadUserTable();
        if(userDic.ContainsKey(inputName))
        {
            string value;
            if(userDic.TryGetValue(inputName,out value))
            {
                      if(value==inputPassword)
                      {
                      Debug.Log("登成功!");
                      }
                
            }
            else
            {
                Debug.Log("密码错误!");
            }
        }
        else
        {
            Debug.Log("用户名不存在!");
        }
    }
    /// <summary>
    /// 注册
    /// </summary>
    /// <param name="inputName">输入的用户名</param>
    /// <param name="inputPassword">输入的密码</param>
    private void OnRegister(string inputName, string inputPassword)
    {
        ReadUserTable();
        if (userDic.ContainsKey(inputName))
        {
            Debug.Log("用户已存在!");
        }
        else
        {
            MySqlTool.GetInstance().InsertUser("user", inputName,inputPassword);
            Debug.Log("用户注册成功!");
        }
    }
}

三、属性映射关系

挂载LoginPanel脚本,并将控件映射到公共属性如下:

在这里插入图片描述

四、运行测试

有问题请指出,谢谢!

  • 5
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1、本课程是一个干货课程,主要讲解如何封装服务器底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,跨平台windows和linux,服务器性能高效,单服务器压力测试上万无压力,服务器框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握服务器框架上手写业务逻辑。2、本课程是一个底层服务器框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,服务器底层使用初始化即开辟内存的技术,使用内存池,服务器运行期间内存不会溢出,非常稳定,同时服务器使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、服务器底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯客户端,主要用于服务器之间通信,也就是说你想搭建多层结构的服务器,服务器与服务器之间使用socket通信。还可以使用c++客户端做压力测试,开辟多线程连接服务器,教程提供了压力测试,学员可以自己做压力测试服务器性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录注册,玩家离开,同步主要是教会学员服务器与客户端如何交互。6、赠送c++连接mysql数据库框架demo,登录注册,玩家离开数据持久化.7、服务器教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、服务器教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、服务器教程提供源码,大家可以在平台提供的地址下载或者联系我,服务器使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值