Unity连接Mysql数据库,小项目学习

制作中可能用到的资料:

https://dev.mysql.com/downloads/

视频教学

https://www.bilibili.com/video/BV1S7411M7P7?from=search&seid=1780740931854569426

MySQL Connector/NET的下载以及安装教程

https://blog.csdn.net/weixin_42220953/article/details/108341921

下载地址:

https://downloads.mysql.com/archives/c-net/

Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误解决办法

https://blog.csdn.net/qq_41030861/article/details/100012275

https://blog.csdn.net/qq_34735841/article/details/100896095

image-20210510215752787

https://www.bilibili.com/read/cv4790659

mysql服务启动

image-20210519155346643

数据库设计

image-20210519155426975

unity GUI 界面设计:

image-20210519162952096

写好unity 连接mysql的包装类:

using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Diagnostics;
using UnityEngine;

public class MySqlAccess {

    private static MySqlConnection mySqlConnection;//连接类对象
    private static string host;//IP地址
    private static string port;//端口号
    private static string userName;//用户名
    private static string password;//密码
    private static string databaseName;//数据库名称

    enum Operate {
        Select, Insert
    }
    /// <summary>
    /// 构造方法
    /// </summary>
    /// <param name="_host">ip地址</param>
    /// <param name="_userName">用户名</param>
    /// <param name="_password">密码</param>
    /// <param name="_databaseName">数据库名称</param>
    public MySqlAccess(string _host, string _port, string _userName, string _password, string _databaseName) {
        host = _host;
        port = _port;
        userName = _userName;
        password = _password;
        databaseName = _databaseName;
        OpenSql();
    }
    // 打开数据库
    public void OpenSql() {
        try {
            string mySqlString =
                "Database=" + databaseName + ";DataSource=" + host + ";User=" + userName + ";Password=" + password + ";port=" + port + ";";
            mySqlConnection = new MySqlConnection(mySqlString);
            UnityEngine.Debug.Log("连接成功");
            //if(mySqlConnection.State == ConnectionState.Closed)
            mySqlConnection.Open();

        }
        catch (Exception e) {
            throw new Exception("服务器连接失败,请重新检查MySql服务是否打开。" + e.Message.ToString());
        }

    }
    // 关闭数据库
    public void CloseSql() {
        if (mySqlConnection != null) {
            mySqlConnection.Close();
            mySqlConnection.Dispose();
            mySqlConnection = null;
        }
    }

    /// <summary>
    /// 查询数据
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="items">要查询的列</param>
    /// <param name="whereColumnName">查询的条件列</param>
    /// <param name="operation">条件操作符</param>
    /// <param name="value">条件的值</param>
    /// <returns></returns>
    public DataSet Select(string tableName, string[] items, string[] whereColumnName, string[] operation, string[] value) {
        if (whereColumnName.Length != operation.Length || operation.Length != value.Length) {
            throw new Exception("输入不正确:" + "要查询的条件、条件操作符、条件值 的数量不一致!");
        }
        string query = "Select " + items[0];
        for (int i = 1; i < items.Length; i++) {
            query += "," + items[i];
        }

        query += " FROM " + tableName + " WHERE " + whereColumnName[0] + " " + operation[0] + " '" + value[0] + "'";
        for (int i = 1; i < whereColumnName.Length; i++) {
            query += " and " + whereColumnName[i] + " " + operation[i] + " '" + value[i] + "'";
        }
        return QuerySet(query, Operate.Select);

    }

    /// <summary>
    /// 执行SQL语句
    /// </summary>
    /// <param name="sqlString">sql语句</param>
    /// <returns></returns>
    private DataSet QuerySet(string sqlString, Operate op) {
        
        if (mySqlConnection.State == ConnectionState.Open) {
            DataSet ds = new DataSet();
            MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(sqlString, mySqlConnection);
            mySqlAdapter.Fill(ds);
            switch (op) {
                case Operate.Select: return ds.Tables[0].Rows.Count > 0 ? ds : null;
                case Operate.Insert:return null;
            }
            mySqlAdapter.Dispose();
        }
        return null;
    }


    public bool Insert(string tableName, string[] items, string[] value) {
        DataSet ds = QuerySet("Select level from test where name='" + value[0] + "'", Operate.Select);
        if (ds != null) {
            return false;
        }
        else {
            if (items.Length != value.Length) {
                throw new Exception("输入不正确:" + "要查询的条件、条件操作符、条件值 的数量不一致!");
            }
            string query = "Insert Into " + tableName + " ( " + items[0];
            for (int i = 1; i < items.Length; i++) {
                query += "," + items[i];
            }
            query += " ) Values ( '" + value[0] + "'";
            for (int i = 1; i < value.Length; i++) {
                query += ",'" + value[i] + "'";
            }
            query += " )";
            UnityEngine.Debug.Log(query);
            QuerySet(query, Operate.Insert);
        }
        return true;
    }
}

登录按钮绑定脚本User Log In.js

当点击登录后调用脚本中OnLogInBtnClick()方法:

image-20210519163023360

UserLogIn.js:

using System.Collections;
using System.Collections.Generic;
using System.Data;
using UnityEngine;
using UnityEngine.UI;

public class UserLogIn : MonoBehaviour
{
    public InputField userNameInput;
    public InputField passwordInput;
    public Image mes;
    public string host;//IP地址
    public string port;//端口号
    public string userName;//用户名
    public string password;//密码
    public string databaseName;//数据库名称
    protected MySqlAccess mysql;//封装好的数据库类
    // Start is called before the first frame update
    void Start()
    {
        mysql = new MySqlAccess(host, port, userName, password, databaseName);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void OnLogInBtnClick() {
        mysql.OpenSql();
        //获取数据
        DataSet ds = mysql.Select("test", new string[] { "password","level" }, new string[] { "name"}, new string[] { "="}, new string[] { userNameInput.text});
        if (ds != null) {
            DataTable table = ds.Tables[0];
            List<string>data=new List<string>();
            foreach (DataRow row in table.Rows) {
                foreach (DataColumn col in table.Columns) {
                    data.Add(row[col].ToString());
                }
            }
            if (data[0]==passwordInput.text) {
                Debug.Log("登陆成功");
                mes.color = Color.green;
            }
            else {
                Debug.Log("登陆失败");
                mes.color = Color.red;
            }
        }
        else {
            Debug.Log("登陆失败");
            mes.color = Color.red;
        }
        mysql.CloseSql();
    }
}

启动后:

初始状态:

image-20210519163249232

登录成功:

image-20210519163314720

登录失败:

image-20210519163334533

扩展:注册功能,有时间写

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity连接MySQL数据库可以通过使用MySQL Connector/NET来实现。下面是一些基本步骤: 1. 下载并安装MySQL Connector/NET:首先,你需要从MySQL官方网站下载并安装MySQL Connector/NET。这是一个用于在.NET应用程序中连接和操作MySQL数据库的驱动程序。 2. 导入MySQL Connector/NET到Unity项目:在Unity中,你需要将MySQL Connector/NET的DLL文件导入到项目中。可以将DLL文件直接拖放到Unity的Assets文件夹中。 3. 编写连接代码:在Unity中,你可以使用C#编写代码来连接MySQL数据库。首先,你需要在代码中引入MySQL Connector/NET的命名空间。然后,使用连接字符串来指定数据库连接信息,包括服务器地址、用户名、密码等。最后,使用MySQL Connector/NET提供的类和方法来执行数据库操作,如查询、插入、更新等。 以下是一个简单的示例代码,展示了如何连接MySQL数据库并执行查询操作: ```csharp using System; using MySql.Data.MySqlClient; public class MySQLConnector : MonoBehaviour { private MySqlConnection connection; private string server = "localhost"; private string database = "your_database_name"; private string uid = "your_username"; private string password = "your_password"; void Start() { string connectionString = $"Server={server};Database={database};Uid={uid};Pwd={password};"; connection = new MySqlConnection(connectionString); try { connection.Open(); Debug.Log("Connected to MySQL database!"); // 执行查询操作 string query = "SELECT * FROM your_table_name"; MySqlCommand cmd = new MySqlCommand(query, connection); MySqlDataReader dataReader = cmd.ExecuteReader(); while (dataReader.Read()) { // 处理查询结果 string column1 = dataReader.GetString(0); string column2 = dataReader.GetString(1); Debug.Log($"Column 1: {column1}, Column 2: {column2}"); } dataReader.Close(); } catch (Exception e) { Debug.Log("Error connecting to MySQL database: " + e.Message); } finally { connection.Close(); } } } ``` 请注意,上述代码仅为示例,你需要根据你的实际情况进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值