Unity使用Mysql环境搭配(保姆级)

UnityDemo版本

    Unity版本:2020.3.25;
    Visual Studio版本: 2019;MySql.Data.dll版本:5.2.3
    MySql版本:5.7.35

Mysql下载地址教程

Mysql下载地址

在这里插入图片描述

在这里插入图片描述
下载完成后解压到任意盘即可(楼主我选择的是D盘)
点击查看
在这里插入图片描述
勾选文件扩展名
在这里插入图片描述
右键新建文本文档 修改名称My.ini
在这里插入图片描述
修改后
在这里插入图片描述

打开my.ini 把以下文本复制到里面去 设置basedir(你的安装目录)
和datadir(数据库存放路径 注意:定义路径一定要有data文件夹)

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录   ----------是你的文件路径-------------
basedir=D:\mysql-5.7.35-winx64
# 设置mysql数据库的数据的存放目录  ---------是你的文件路径data文件夹自行创建
datadir=D:\MysqlData\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

按下Win+R 输入cmd 然后回车
右键点击命令提示符 左键点击以管理员运行
在这里插入图片描述

先输入D: 回车
然后输入 cd 解压出来bin文件路径
在这里插入图片描述
然后在控制台输入指令

mysqld --install

在这里插入图片描述
如上图代表成功

接下来在控制台输入命令

mysqld --initialize --console

在这里插入图片描述
记下你随机出来密码 楼主随机出来密码是 VPWuVnRro3:)

输入以下指令启动Mysql服务器

net start mysql

在这里插入图片描述
如上图表示成功

登录Mysql服务器输入

mysql -u root -p

在这里插入图片描述
上图输入你的随机密码
楼主随机出来密码是 VPWuVnRro3:)
在这里插入图片描述
如上图显示就成功了

登录成功可以修改密码为123456
输入指令

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

在这里插入图片描述
如上图成功

安装完成在控制台 输入quit和exit 退出

exit

在这里插入图片描述
接下来进行环境搭配
此电脑右键->属性->高级系统设置
在这里插入图片描述
在这里插入图片描述
新建系统变量

在这里插入图片描述
变量名为:MYSQL_HOME
变量值为你的MySQL安装路径
点击确定
在这里插入图片描述
找到path进行编辑
在这里插入图片描述
新建环境变量
变量为:%MYSQL_HOME%\bin

%MYSQL_HOME%\bin

在这里插入图片描述
在桌面找到此电脑右键此电脑->管理->服务与应用程序->服务

在这里插入图片描述

找到mysql->右键属性
将启动类型改为手动(防止开机速度变慢)
在这里插入图片描述

以上操作已经完成Mysql环境搭建
每次开机以管理员方法打开控制台输入命令

net start mysql

在这里插入图片描述

如果Mysql安装时出现问题

如果在控制台输入以下指令出现问题

  mysqld --install

在这里插入图片描述
解决办法 先以管理员打开控制台 输入

 sc query mysql

在这里插入图片描述
如上图 如果发现有则输入

 sc delete mysql

在这里插入图片描述

在次输入在控制台输入指令

 sc query mysql

在这里插入图片描述
则表示删除成功

Navicat可视化窗口下载教程

下载地址
提取码: qy8s

安装教程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用Navicat可视化窗口

点击连接

在这里插入图片描述
在点击mysql 最后弹出以下窗口
在这里插入图片描述
然后点击确定
在这里插入图片描述
连接成功如下图
在这里插入图片描述
打开数据库出现以下界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后点击保存 弹出以下图
在这里插入图片描述
在这里插入图片描述

Mysql.data.dll下载地址

下载地址
提取码: wr2g

本次Demo下载地址

下载地址

网盘下载地址
提取码: jnc8

下载好后直接把资源包直接放进Assets文件中 运行如下环境配置成功
在这里插入图片描述
如果下载地址丢失请看下面

1:导入Unity安装目录下的必要程序集、I18N.CJK、I18N、I18N.West;(因为2020版的Unity默认加载了System.Data.dll,System.Drawing.dll,所以不用再次导入)安装目录路劲为:Editor\Data\MonoBleedingEdge\lib\mono\unityjit
(注意一定是这个目录下的几个程序集,其他的尝试后无效并且报错)
在这里插入图片描述
在Unity Assets 新建Plugins文件 把这三个文件夹 放到里面去 最后在把Mysql.data.dll 也放进去图下
在这里插入图片描述
本项目脚本 SqlHelper

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using UnityEngine;
/// <summary>
/// Mysql添/删/改/查/框架   切记使用该类方法 除了(Connect方法)其他方法 先调用Open() 使用完后 在Close()掉
/// </summary>
public class SqlHelper
{
    
    
    string _server, _port, _user, _password, _datename, _format;
    string connectStr;
    MySqlConnection conn;
    public SqlHelper(string host, string port, string user, string passwd, string database, string format = "utf8")
    {
    
    
        Connect(host,port,user,passwd,database,format);
    }  
    /// <summary>
    /// 连接数据库
    /// </summary>
    /// <param name="host">IP地址</param>
    /// <param name="port">端口</param>
    /// <param name="user">用户名</param>
    /// <param name="passwd">密码</param>
    /// <param name="database">数据库名称</param>
    /// <param name="format">字体默认utf8</param>
    public void Connect(string host, string port, string user, string passwd, string database, string format = "utf8")
    {
    
    
        _server = host;
        _port = port; _user = user;
        _password = passwd;
        _datename = database;
        _format = format;
        connectStr = string.Format("server={0};port={1};user={2};password={3}; database={4};charset={5}", _server, _port, _user, _password, _datename, _format);//设置连接ip,端口,用户名,密码,以及编码格式    
        conn = new MySqlConnection(connectStr);//创建连接类
    }

    /// <summary>
    /// 打开数据库连接
    /// </summary>
    public void Open()
    {
    
        
        conn.Open();//正式打开连接 
    }
    /// <summary>
    /// 关闭数据库连接
    /// </summary>
    public void Close()
    {
    
    
        conn.Close();//关闭连接
    }

    #region 查询语句
    /// <summary>
    /// 查询指定字段
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="items"></param>
    /// <returns></returns>
    public DataSet Select(string tableName, string[] items)
    {
    
    
        string query = "SELECT " + items[0];
        for (int i = 1; i < items.Length; ++i)
        {
    
    
            query += ", " + items[i];
        }
        query += " FROM " + tableName;
        Debug.LogFormat("query: {0}", query);
        return ExecuteQuery(query);
    }
    /// <summary>
    /// 查询所有字段
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <returns></returns>
    public DataSet Select(string tableName)
    {
    
    
        string query = "SELECT * FROM " + tableName;
        return ExecuteQuery(query);
    }
    /// <summary>
    /// 查询指定字段数据中满足条件的
    /// DataSet内存中的数据库,DataSet是不依赖于数据库的独立数据集合,是一种不包含表头的纯数据文件
    /// 有条件的查询,查询在users这个表当中,只需要字段名为userAccount,userPwd,userName,ID这几个字段对应的数据,
    /// 满足条件为 userAccount对应的value=account, userPwd对应的value=md5Password;
    /// ("users", new string[] { "userAccount", "userPwd", "userName", "ID" }, new string[] { "userAccount", "userPwd" }, new string[] { "=", "=" }, new string[] { account, md5Password });
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="items">查询字段名</param>
    /// <param name="cols">判断字段名</param>
    /// <param name="operations">条件运算符</param>
    /// <param name="values">满足的条件值</param>
    /// <returns></returns>
    public DataSet SelectWhere(string tableName, string[] items, string[] cols, string[] operations, string[] values)
    {
    
    
        if (cols.Length != operations.Length || operations.Length != values.Length)
        {
    
    
            throw new Exception("col.Length != operation.Length != values.Length");
        }

        string query = "SELECT " + items[0];

        for (int i = 1; i < items.Length; ++i)
        {
    
    
            query += ", " + items[i];
        }

        query += " FROM " + tableName + " WHERE " + cols[0] + operations[0] + "'" + values[0] + "' ";

        for (int i = 1; i < cols.Length; ++i)
        {
    
    
            query += " AND " + cols[i] + operations[i] + "'" + values[i] + "' ";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteQuery(query);
    }
   
    /// <summary>
    /// 执行查询语句,返回DataSet
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <returns>DataSet</returns>
    public DataSet ExecuteQuery(string SQLString)
    {
    
    
        DataSet ds = new DataSet();
        try
        {
    
    
            MySqlDataAdapter da = new MySqlDataAdapter(SQLString, conn);
            da.Fill(ds);
        }
        catch (MySqlException ex)
        {
    
    
            throw new Exception(ex.Message);
        }
        return ds;
    }
    #endregion

    #region 更新语句
    /// <summary>
    /// 当指定字段满足一定条件时,更新指定字段的数据
    /// 例如更新在user这个表中字段名为userAccount的值等于10086时,将对应userPwd字段的值改成newMd5SumPassword
    /// ("users", new string[] { "userPwd" }, new string[] { newMd5SumPassword }, "userAccount", "10086")
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段</param>
    /// <param name="colsValues">字段值</param>
    /// <param name="selectKey">指定的字段</param>
    /// <param name="selectValue">指定字段满足的条件</param>
    /// <returns></returns>
    public int UpdateInto(string tableName, string[] cols, string[] colsValues, string[] selectKeys, string[] selectValues)
    {
    
    
        string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + "'" + colsValues[0] + "'";

        for (int i = 1; i < colsValues.Length; ++i)
        {
    
    
            query += ", " + cols[i] + " =" + "'" + colsValues[i] + "'";
        }

        query += " WHERE " + selectKeys[0] + " = " + "'" + selectValues[0] + "' ";
        for (int i = 1; i < selectKeys.Length; ++i)
        {
    
    
            query += " AND " + selectKeys[i] + " = " + "'" + selectValues[i] + "' ";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }
    /// <summary>
    /// 当指定字段满足一定条件时,更新指定字段的数据
    /// 例如更新在user这个表中字段名为userAccount的值等于10086时,将对应userPwd字段的值改成newMd5SumPassword
    /// ("users", new string[] { "userPwd" }, new string[] { newMd5SumPassword }, "userAccount", "10086")
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段</param>
    /// <param name="colsValues">字段值</param>
    /// <param name="selectKey">指定的字段</param>
    /// <param name="selectValue">指定字段满足的条件</param>
    /// <returns></returns>
    public int UpdateInto(string tableName, string[] cols, float[] colsValues, string[] selectKeys, string[] selectValues)
    {
    
    
        string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + colsValues[0];

        for (int i = 1; i < colsValues.Length; ++i)
        {
    
    
            query += ", " + cols[i] + " =" + colsValues[i];
        }

        query += " WHERE " + selectKeys[0] + " = " + "'" + selectValues[0] + "' ";
        for (int i = 1; i < selectKeys.Length; ++i)
        {
    
    
            query += " AND " + selectKeys[i] + " = " + "'" + selectValues[i] + "' ";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }

    /// <summary>
    /// 当指定字段满足一定条件时,更新指定字段的数据
    /// 例如更新在user这个表中字段名为userAccount的值等于10086时,将对应userPwd字段的值改成newMd5SumPassword
    /// ("users", new string[] { "userPwd" }, new string[] { newMd5SumPassword }, "userAccount", "10086")
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段</param>
    /// <param name="colsValues">字段值</param>
    /// <param name="selectKey">指定的字段</param>
    /// <param name="selectValue">指定字段满足的条件</param>
    /// <returns></returns>
    public int UpdateInto(string tableName, string[] cols, int[] colsValues, string[] selectKeys, string[] selectValues)
    {
    
    
        string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + colsValues[0];

        for (int i = 1; i < colsValues.Length; ++i)
        {
    
    
            query += ", " + cols[i] + " =" + colsValues[i];
        }

        query += " WHERE " + selectKeys[0] + " = " + "'" + selectValues[0] + "' ";
        for (int i = 1; i < selectKeys.Length; ++i)
        {
    
    
            query += " AND " + selectKeys[i] + " = " + "'" + selectValues[i] + "' ";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }

    /// <summary>
    /// 当指定字段满足一定条件时,更新指定字段的数据
    /// 例如更新在user这个表中字段名为userAccount的值等于10086时,将对应userPwd字段的值改成newMd5SumPassword
    /// ("users", new string[] { "userPwd" }, new string[] { newMd5SumPassword }, "userAccount", "10086")
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段</param>
    /// <param name="colsValues">字段值</param>
    /// <param name="selectKey">指定的字段</param>
    /// <param name="selectValue">指定字段满足的条件</param>
    /// <returns></returns>
    public int UpdateInto<T>(string tableName, string[] cols, T[] colsValues, string[] selectKeys, string[] selectValues) where T : struct
    {
    
    
        string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + colsValues[0];

        for (int i = 1; i < colsValues.Length; ++i)
        {
    
    
            query += ", " + cols[i] + " =" + colsValues[i];
        }

        query += " WHERE " + selectKeys[0] + " = " + "'" + selectValues[0] + "' ";
        for (int i = 1; i < selectKeys.Length; ++i)
        {
    
    
            query += " AND " + selectKeys[i] + " = " + "'" + selectValues[i] + "' ";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }
    #endregion

    #region 插入语句
    /// <summary>
    /// 插入部分ID
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段名</param>
    /// <param name="values">具体数值</param>
    /// <returns></returns>
    public int InsertInto(string tableName, string[] cols, string[] values)
    {
    
    
        if (cols.Length != values.Length)
        {
    
    
            throw new Exception("columns.Length != colType.Length");
        }

        string query = "INSERT INTO " + tableName + " (" + cols[0];
        for (int i = 1; i < cols.Length; ++i)
        {
    
    
            query += ", " + cols[i];
        }

        query += ") VALUES (" + "'" + values[0] + "'";
        for (int i = 1; i < values.Length; ++i)
        {
    
    
            query += ", " + "'" + values[i] + "'";
        }

        query += ")";
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }
    #endregion

    #region 删除语句
    /// <summary>
    /// 删除
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="cols">字段</param>
    /// <param name="colsValues">字段值</param>
    /// <returns></returns>
    public int Delete(string tableName, string[] cols, string[] colsValues)
    {
    
    
        string query = "DELETE FROM " + tableName + " WHERE " + cols[0] + " = " + "'" + colsValues[0] + "'";

        for (int i = 1; i < colsValues.Length; ++i)
        {
    
    
            query += " and " + cols[i] + " = " + "'" + colsValues[i] + "'";
        }
        Debug.LogFormat("query: {0}", query);
        return ExecuteNonQuery(query);
    }
    #endregion
   
    
    /// <summary>
    /// 执行SQL语句,返回影响的记录数。用于Update、Insert和Delete
    /// </summary>
    /// <param name="SQLString">SQL语句</param>
    /// <returns>影响的记录数</returns>
    public int ExecuteNonQuery(string SQLString)
    {
    
    

        using (MySqlCommand cmd = new MySqlCommand(SQLString, conn))
        {
    
    
            try
            {
    
    
                int rows = cmd.ExecuteNonQuery();
                return rows;
            }
            catch (MySqlException E)
            {
    
    
                throw new Exception(E.Message);
            }
            finally
            {
    
    
                cmd.Dispose();
            }
        }

    }
     
}

本项目脚本 mysqlTools工具类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
/*
  DataSet类使用方法
  asp.NET中DataSet对象获取相应列值、行列数、列名、取出特定值这些操作的总结,具体代码如下:

  1.  DataSet.Table[0].Rows[ i ][ j ]
      其中i 代表第 i 行数, j 代表第 j 列数

  2. DataSet.Table[0].Rows[ i ].ItemArray[ j ]
      其中i 代表第 i 行数, j 代表第 j 列数

  3. DataSet.Tables[0].Columns.Count
      取得表的总列数

  4. DataSet.Tables[0].Rows.Count
      取得表的总行数

  5. DataSet.Tables[0].Columns[ i ].ToString()
      取得表的 i 列名(字段名)

  6.  ds.Tables.Count - 返回表的数量,一个 select 返回一个 table
   */
/// <summary>
/// mysql工具类
/// </summary>
public class MysqlTools 
{
    
    
    /// <summary>
    /// 初始化对象
    /// </summary>
    public static MysqlTools Instance {
    
     get; }
    static MysqlTools()
    {
    
    
        Instance = new MysqlTools();
    } 
    /// <summary>
    /// 获取表中数据 字典中第一个键是条数 第二个是字段名 对应字段值
    /// 条数从0开始
    /// </summary>
    /// <param name="ds">数据表类</param>
    /// <returns></returns>
    public Dictionary<int, Dictionary<string, object>> TableData(DataSet ds)
    {
    
    
        Dictionary<int, Dictionary<string,object>> tableList = new Dictionary<int, Dictionary<string, object>>();
        //遍历DataSet表条数
        for (int i = 0; i < ds.Tables.Count; i++)
        {
    
    
            //遍历表该条字段数量
            for (int j = 0; j < ds.Tables[i].Rows.Count; j++)
            {
    
    
                //根据该条数 并新建一块字典空间存储到该字典中
                tableList.Add(j, new Dictionary<string, object>());
                //存储该条数类对象
                var temp = ds.Tables[i];
                //获取该条所有字段值
                var obj = temp.Rows[j].ItemArray;
                //遍历该字段对应字段值
                for (int k = 0; k < obj.Length; k++)
                {
    
    
                    //获取该字段名称
                    string tableName = temp.Columns[k].ToString();
                    //根据字段名称 和对应字段值存储到字段中
                    tableList[j].Add(tableName, obj[k]);
                }             
            }
        }
        return tableList;
    }
    /// <summary>
    /// 获取单个数据
    /// </summary>
    /// <param name="ds">数据表类</param>
    /// <param name="Name">字段名称</param>
    /// <returns></returns>
    public object GetValue(DataSet ds,string Name)
    {
    
    
        //遍历DataSet表条数
        for (int i = 0; i < ds.Tables.Count; i++)
        {
    
    
            //遍历表该条字段数量
            for (int j = 0; j < ds.Tables[i].Rows.Count; j++)
            {
    
    
                //存储该条数类对象
                var temp = ds.Tables[i];
                //获取该条所有字段值
                var obj = temp.Rows[j].ItemArray;
                for (int k = 0; k < obj.Length; k++)
                {
    
    
                    //获取该字段名称
                    string tableName = temp.Columns[k].ToString();
                    //判断该字段名称是否等于Name
                    if(tableName == Name)
                    {
    
    
                        //返回数据
                        return obj[k];
                    }
                }
            }
        }
        return null;
    }
    /// <summary>
    /// 获取多个数据
    /// </summary>
    /// <returns></returns>
    public object[] GetValues(DataSet ds, string Name)
    {
    
    
        List<object> list = new List<object>();
        //遍历DataSet表条数
        for (int i = 0; i < ds.Tables.Count; i++)
        {
    
    
            //遍历表该条字段数量
            for (int j = 0; j < ds.Tables[i].Rows.Count; j++)
            {
    
    
                //存储该条数类对象
                var temp = ds.Tables[i];
                //获取该条所有字段值
                var obj = temp.Rows[j].ItemArray;
                for (int k = 0; k < obj.Length; k++)
                {
    
    
                    //获取该字段名称
                    string tableName = temp.Columns[k].ToString();
                    //判断该字段名称是否等于Name
                    if (tableName == Name)
                    {
    
    
                        //存储到集合中
                        list.Add(obj[k]);
                    }
                }
            }
        }
        //返回集合
        return list.Count == 0 ? null : list.ToArray();
    }
}

本项目脚本Test

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    
    

    void Start()
    {
    
    
        //创建数据库类                 IP地址       端口    用户名   密码     数据库项目名称
        var mySqlTools = new SqlHelper("127.0.0.1", "3306", "root", "123456", "user");
        //打开数据库
        mySqlTools.Open();
        //查询方法
        FindMysql(mySqlTools, "userdata", new[] {
    
     "UID", "User", "Password" });
        
        //  插入方法                表名         字段名                             插入数据
        // mySqlTools.InsertInto("userdata", new[] { "UID", "User", "Password" },new[] {"水神","ddxj1","123456" });
        
        //  更新方法             表名         更新字段名             更新数据     查询条件字段      条件成立字段
        // mySqlTools.UpdateInto("userdata",new[] {"Password" },new[] {"456789" },new[] { "User"},new[] { "ddxj1"});
        
        //  删除方法          表名          删除字段        删除数据         
        // mySqlTools.Delete("userdata", new[] { "User" }, new[] { "ddxj1" });

        // 从SqlHelper查询出来数据库 都会返回Dataset       DataSet类                  字段名
        //       返回对象object          获取数据方法    
        //var GetValues = MysqlTools.Instance.GetValue(mySqlTools.Select("userdata"), "User");
        //print(GetValues);
        //关闭数据库
        mySqlTools.Close();
    }

    /// <summary>
    /// 查询表中数据   记得先调用Open()方法  用完此方法后直接Close()
    /// </summary>
    /// <param name="mySqlTools">Mysql框架类</param>
    /// <param name="tableName">表名</param>
    /// <param name="items">字段名称</param>
    void FindMysql(SqlHelper mySqlTools,string tableName,string[] items)
    {
    
    
        var ds = mySqlTools.Select(tableName, items);
        var pairs = MysqlTools.Instance.TableData(ds);
        DebugMysql(pairs);      
    }
    /// <summary>
    /// 打印查询数据库
    /// </summary>
    /// <param name="pairs"></param>
    private void DebugMysql(Dictionary<int,Dictionary<string,object>> pairs)
    {
    
    
        foreach (var Line in pairs)
        {
    
    
            foreach (var table in Line.Value)
            {
    
    
                string tableList = string.Format("第{0}行,表字段名对应数据是 {1}", Line.Key + 1, table);
                print(tableList);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43333567/article/details/122494042