我是如何用unity连接MySQL的

        大家好,我是毕星好雨,之前做过一期unity连接数据库的视频,本来是一期开发日志,后来有很多小伙伴想学习这个功能。今天从头连接一个给大家看看。由于我也是查阅各种资料偶然成功的,其中的原理我也不太懂,所以只能演示一遍如何连接。具体原理还是请大家自己探索吧!
那么现在直接开始操作。

        如果嫌啰嗦,文章末尾有代码全貌!

        1.先导入MySQL里的unity插件,插件路径是C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.8,当然不是v4.8其他的也可以,还有就是把这个MySql.Web删除,不然打包的时候会出错,你做就对了。

 全部复制。我在unity里创建了一个Plugins的文件夹,如果以后导入其他插件,都放这里,每种插件都单独放一个子文件夹里,总之这样就是很有条理。

 2.代码环节,先引入命名空间。

using MySql.Data.MySqlClient;

然后写好服务器的一些信息,包括服务器地址,端口号,用户名,密码,数据库名称,字符格式。 

//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
    public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");


写好后,在start里打开数据库,打开后判断一下是否打开了,然后debug一下。最后不要忘了关闭数据库。(此功能全部代码如下)

//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
    public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");

    // Start is called before the first frame update
    void Start()
    {
        //打开数据库
        conn.Open();
        //判断是否连接成功
        if (conn.State == System.Data.ConnectionState.Open)
        {
            Debug.Log("连接成功");
        }
        //关闭数据库
        conn.Close();
    }

由于目标计算机积极拒绝,无法连接。记住要打开服务。

 

 再次运行一下,很好,连接成功了。

3.数据库功能之查找功能,判断某个数据是否存在。 
首先写一个名字变量。(我要查询是否存在这个名字变量的值)

public string 名字;

写一个查找方法,然后新建一个局部变量列表,用来存放这个数据类型的所有数据。
比如要取一个名字,那么拿这个名字和列表的所有名字做比较,这样子。

public void 判断是否存在()
    {
        //列表
        List<string> 列表 = new List<string>();
        //查询
        MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
        //读取
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            列表.Add(reader.GetString("名字"));
        }
        reader.Close();
        //对比
        foreach (var item in 列表)
        {
            if (列表.Contains(名字))
            {
                Debug.Log("该用户名已存在");
                break;
            }
            else
            {
                Debug.Log("不存在该用户名");
                break;
            }
        }
    }

写好后在start里调用一下
select(即为查找)名字from(即为从的意思)users(即表的名字)然后读取并添加到列表,然后关闭读取。
最后用foreach查询列表判断是否存在。
我查询一个名字叫“毕星好雨”的玩家,然后该玩家存在。
随便输入一个不存在的名字,会显示玩家不存在。

这是我库里的一些数据

 运行后的两种结果

 目前代码的全貌如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//
using MySql.Data.MySqlClient;

public class SQL : MonoBehaviour
{
    public string 名字;
    //-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
    public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");

    // Start is called before the first frame update
    void Start()
    {
        //打开数据库
        conn.Open();
        //判断是否连接成功
        if (conn.State == System.Data.ConnectionState.Open)
        {
            Debug.Log("连接成功");
        }
        //判断数据是否存在
        判断是否存在();
        //关闭数据库
        conn.Close();
    }
    public void 判断是否存在()
    {
        //列表
        List<string> 列表 = new List<string>();
        //查询
        MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
        //读取
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            列表.Add(reader.GetString("名字"));
        }
        reader.Close();
        //对比
        foreach (var item in 列表)
        {
            if (列表.Contains(名字))
            {
                Debug.Log("该用户名已存在");
                break;
            }
            else
            {
                Debug.Log("不存在该用户名");
                break;
            }
        }
    }
}

 4.读取数据
select 要查询的数据 form 表名 where 账号(数据类型)=账号(变量名)。

public void 读取数据()
    {
        //查找---------------------------------------要查询的数据------------表名------------查询数据的位置----输入的位置----------
        MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + " where " + "账号" + "='" + 账号 + "'", conn);
        //读取
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            //打印
            Debug.Log(reader.GetString("名字"));
        }
        reader.Close();
    }

意思就是我要在哪个表里,哪个账号是我当前输入的账号,的名字的值。
可以查出账号是“1”的玩家的名字叫“毕星好雨”。(上面有数据库部分信息)

5.接下来三个功能代码如下,同理:
a.修改数据(update),也是更新数据(例如玩家修改名字,玩家道具数量的改变等等)

MySqlCommand cmd = new MySqlCommand("update users set 名字='" + 修改名字 + "'where 账号 ='" + 账号 + "'", conn);

b.添加数据(insert into),玩家在注册账号的时候,名字没有占用,那么触发注册成功事件,添加该玩家的账号信息即可。

MySqlCommand cmd = new MySqlCommand("insert into users set 名字 ='" + 注册的名字 + "'" + ",密码='" + 注册的密码 + "'", conn);

c.删除数据(delete),一般玩家用不上,而且代码也简单不做解释。

MySqlCommand cmd = new MySqlCommand("delete from users where 账号=15", conn);

最后附上整体代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//
using MySql.Data.MySqlClient;

public class SQL : MonoBehaviour
{
    public string 账号;//此变量用来 : 输入账号查找名字
    public string 名字;//此变量用来 : 查找名字是否重复
    public string 修改名字;//此变量用来 : 修改变量
    public string 注册的名字, 注册的密码;//此变量用来 : 注册(添加数据)

    //-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
    public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");

    // Start is called before the first frame update
    void Start()
    {
        //打开数据库
        conn.Open();
        //判断是否连接成功
        if (conn.State == System.Data.ConnectionState.Open)
        {
            Debug.Log("连接成功");
        }
        //判断数据是否存在
        判断是否存在();
        //
        读取数据();
        //
        //关闭数据库
        conn.Close();
    }
    public void 判断是否存在()
    {
        //列表
        List<string> 列表 = new List<string>();
        //查询
        MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
        //读取
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            列表.Add(reader.GetString("名字"));
        }
        reader.Close();
        //对比
        foreach (var item in 列表)
        {
            if (列表.Contains(名字))
            {
                Debug.Log("该用户名已存在");
                break;
            }
            else
            {
                Debug.Log("不存在该用户名");
                break;
            }
        }
    }
    public void 读取数据()
    {
        //查找---------------------------------------要查询的数据------------表名------------查询数据的位置----输入的位置----------
        MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + " where " + "账号" + "='" + 账号 + "'", conn);
        //读取
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            //打印
            Debug.Log(reader.GetString("名字"));
        }
        reader.Close();
    }
    public void 修改数据()
    {
        MySqlCommand cmd = new MySqlCommand("update users set 名字='" + 修改名字 + "'where 账号 ='" + 账号 + "'", conn);
        cmd.ExecuteNonQuery();
    }
    public void 添加数据()
    {
        MySqlCommand cmd = new MySqlCommand("insert into users set 名字 ='" + 注册的名字 + "'" + ",密码='" + 注册的密码 + "'", conn);
        cmd.ExecuteNonQuery();
    }
    public void 删除数据()
    {
        MySqlCommand cmd = new MySqlCommand("delete from users where 账号=15", conn);
        cmd.ExecuteNonQuery();
    }
}

文章到这就结束了,掌握C#的方式查找增删改查MySQL就已经可以做出一个登录功能了,也可以做保存玩家数据的功能。

B站有我之前做的一些unity的开发日志,后面有机会还会更新开发日志的最新进度,感兴趣的小伙伴可以来一手关注,以后有什么不懂的或者想看的都可以评论区留言。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值