Unity MySql安装部署与Unity连接 下篇

news2025/3/14 22:51:59

一、前言

        上篇讲到了如何安装与部署本地MySql;本篇主要讲Unity与MySql连接、创建表、删除表,然后就是对表中数据的增、删、改、查等操作。再讲这些之前会说一些安装MySql碰到的一些问题和Unity连接的问题。

        当把本地MySql部署好之后,我们可能会遇到只有本机能访问的问题,如果碰到这个问题,我们需要把当前数据库的权限修改一下,如图所示,这是我们新建一个数据库后自动生成的一个user表,里面包含一些访问权限,如果没开放权限,那么当我们在局域网下访问装有mysql的机器时会发现只有本机可以访问到,其他机器访问不了,这时候我们就需要执行一些命令来修改访问权限。

第一步:cd MySql路径

第二步:登录 mysql -u root -p

第三步:进入数据库 use mysql

第四步:select user,host from user;

第五步:uptate user set host='%' where user='root';

这样就ok了,最后在刷新一下

flush privileges; 这样就可以在局域网下,所有机器都能访问到这个数据库

二、Unity连接MySql

        可以先在网上找到与自己.net或者mysql对应版本的MySql.Data.dll文件,将这个文件下载下来放到Unity Plugins文件夹下,我这里用的是5.7.38版本

        下一步就是熟悉MySql的命令语句,这个可以去MySql官网查询,这里就不多讲了;直接来看一下unity怎么连接MySql和对数据库中的数据进行操作。

        连接MySql:

//连接类对象
        MySqlConnection msc;

        /// <summary>
        /// 连接数据库
        /// </summary>
        /// <param name="serverIP">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 serverIP, string port, string user, string password, string sqlName)
        {
            string connectStr = $"server = {serverIP};port = {port};user = {user};database = {sqlName};password = {password};charset = utf8";
            msc = new MySqlConnection(connectStr);
        }

        打开和关闭连接:

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

        完成上述操作,我们基本上就可以连接、打开、关闭数据库了。再下面就是对数据库中表的一些操作。

        表    查找  -->  创建  -->  删除

#region 表 --> 查找 --> 创建  --> 删除
        /// <summary>
        /// 查找表是否存在
        /// </summary>
        /// <param name="tablename"></param>
        /// <returns></returns>
        public bool IsTableExist(string tablename)
        {
            bool tableExists = false;
            string query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName";

            using (MySqlCommand command = new MySqlCommand(query, msc))
            {
                command.Parameters.AddWithValue("@TableName", tablename);
                tableExists = Convert.ToInt32(command.ExecuteScalar()) > 0;
            }
            return tableExists;
        }
        
        /// <summary>
        /// 创建表
        /// </summary>
        /// <param name="name"></param>
        /// <param name="property"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public int CreateTable(string name, string[] property, string[] type)
        {
            string query = $"CREATE TABLE IF NOT EXISTS UserMgr (ID VARCHAR(255), Type VARCHAR(255), UserName VARCHAR(255), Password VARCHAR(255))";
            
            return ExecuteNonQuery(query);
        }
        
        /// <summary>
        /// 删除表
        /// </summary>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public int DeleteTable(string tableName)
        {
            string query = $"DROP TABLE IF EXISTS {tableName};";
 
            return ExecuteNonQuery(query);
        }
        #endregion

       

        增:

#region 增
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="ID"></param>
        /// <param name="type"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void AddTableData(string ID, string type, string username, string password)
        {
            string sql = "insert into usermgr(ID,Type,UserName,Password) values('" + ID + "','" + type + "','" + username + "','" + password + "')";
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            //返回更改数据行数
            int result = cmd.ExecuteNonQuery();
            Debug.Log("添加数据成功:"+ result);
        }
        #endregion

        删:

 #region 删
        /// <summary>
        /// 删除指定ID的数据
        /// </summary>
        /// <param name="ID"></param>
        public void DeleteTableData(string ID)
        {
            //删除的sql命令,这里是删除player中id=2的一行数据
            string sql = $"delete from usermgr where ID={ID}";                                     
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            int result = cmd.ExecuteNonQuery();
            Debug.Log("删除数据成功:" + result);
        }
        #endregion

        改:

#region 改
        /// <summary>
        /// 根据id去修改 用户类型 用户名 用户密码
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="ID"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void AmendTableData(string ID, string type, string username, string password)
        {
            //更新
            string sql = $"update UserMgr set UserName='{username}',Password='{password}',Type='{type}' where ID={ID}";//更改的sql命令
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            //返回值是数据库中修改的行数
            int result = cmd.ExecuteNonQuery();
            Debug.Log("更新数据成功:" + result);
        }
        #endregion

        查:

#region 查
        /// <summary>
        /// 查找所有表中所有的数据
        /// </summary>
        public List<UserData> FindTableData()
        {
            string query = "SELECT * FROM usermgr";
            List<UserData> userDatas = new List<UserData>();
            using (MySqlCommand command = new MySqlCommand(query,msc))
            {
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        UserData data = new UserData();
                        data.id = int.Parse(reader.GetString("ID"));
                        data.type = int.Parse(reader.GetString("Type"));
                        data.username = reader.GetString("UserName");
                        data.password = reader.GetString("Password");
                        
                        //Debug.LogError(data.id + data.type + data.username + data.password);
                        
                        userDatas.Add(data);
                    }
                }
            }

            return userDatas;
        }
        #endregion

以上就是Unity与MySql连接进行一些数据库的基本操作。喜欢的小伙伴点个赞、关注一下吧,写这么多不容易。下面是完整的代码及用法。

完整代码:

        var mySql = new SqlHelper();
        mySql.Connect("192.168.3.250","3306","root","root","kcsql");
        mySql.Open();
        //查找表
        if (!mySql.IsTableExist("UserMgr"))
        {
            //创建表
            mySql.CreateTable("UserMgr", new[] {"Type", "User", "Password"}, new[] {"varchar", "varchar", "varchar"});
        }
        //删除表
        //mySql.DeleteTable("UserMgr");
        //增
        //mySql.AddTableData("2","1","lisi","123456");
        //删
        //mySql.DeleteTableData("2");
        //改
        //mySql.AmendTableData("0","0","pqy","pqy666");
        //查
        //mySql.FindTableData();
        
        mySql.Close();
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using MySql.Data.MySqlClient;
using System;

namespace KC.MySql
{
    public class SqlHelper
    { 
        string connectStr;
        //连接类对象
        MySqlConnection msc;

        /// <summary>
        /// 连接数据库
        /// </summary>
        /// <param name="serverIP">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 serverIP, string port, string user, string password, string sqlName)
        {
            connectStr = $"server = {serverIP};port = {port};user = {user};database = {sqlName};password = {password};charset = utf8";
            msc = new MySqlConnection(connectStr);
        }
 
        /// <summary>
        /// 打开数据库连接
        /// </summary>
        public void Open()
        {
            msc.Open();
        }
 
        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public void Close()
        {
            msc.Close();
        }

        #region 表 --> 查找 --> 创建  --> 删除
        /// <summary>
        /// 查找表是否存在
        /// </summary>
        /// <param name="tablename"></param>
        /// <returns></returns>
        public bool IsTableExist(string tablename)
        {
            bool tableExists = false;
            string query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName";

            using (MySqlCommand command = new MySqlCommand(query, msc))
            {
                command.Parameters.AddWithValue("@TableName", tablename);
                tableExists = Convert.ToInt32(command.ExecuteScalar()) > 0;
            }
            return tableExists;
        }
        
        /// <summary>
        /// 创建表
        /// </summary>
        /// <param name="name"></param>
        /// <param name="property"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public int CreateTable(string name, string[] property, string[] type)
        {
            string query = $"CREATE TABLE IF NOT EXISTS UserMgr (ID VARCHAR(255), Type VARCHAR(255), UserName VARCHAR(255), Password VARCHAR(255))";
            
            return ExecuteNonQuery(query);
        }
        
        /// <summary>
        /// 删除表
        /// </summary>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public int DeleteTable(string tableName)
        {
            string query = $"DROP TABLE IF EXISTS {tableName};";
 
            return ExecuteNonQuery(query);
        }
        #endregion

        #region 增
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="ID"></param>
        /// <param name="type"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void AddTableData(string ID, string type, string username, string password)
        {
            string sql = "insert into usermgr(ID,Type,UserName,Password) values('" + ID + "','" + type + "','" + username + "','" + password + "')";
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            //返回更改数据行数
            int result = cmd.ExecuteNonQuery();
            Debug.Log("添加数据成功:"+ result);
        }
        #endregion
        
        #region 删
        /// <summary>
        /// 删除指定ID的数据
        /// </summary>
        /// <param name="ID"></param>
        public void DeleteTableData(string ID)
        {
            //删除的sql命令,这里是删除player中id=2的一行数据
            string sql = $"delete from usermgr where ID={ID}";                                     
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            int result = cmd.ExecuteNonQuery();
            Debug.Log("删除数据成功:" + result);
        }
        #endregion
        
        #region 改
        /// <summary>
        /// 根据id去修改 用户类型 用户名 用户密码
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="ID"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void AmendTableData(string ID, string type, string username, string password)
        {
            //更新
            string sql = $"update UserMgr set UserName='{username}',Password='{password}',Type='{type}' where ID={ID}";//更改的sql命令
            MySqlCommand cmd = new MySqlCommand(sql, msc);
            //返回值是数据库中修改的行数
            int result = cmd.ExecuteNonQuery();
            Debug.Log("更新数据成功:" + result);
        }
        #endregion
        
        #region 查
        /// <summary>
        /// 查找所有表中所有的数据
        /// </summary>
        public List<UserData> FindTableData()
        {
            string query = "SELECT * FROM usermgr";
            List<UserData> userDatas = new List<UserData>();
            using (MySqlCommand command = new MySqlCommand(query,msc))
            {
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        UserData data = new UserData();
                        data.id = int.Parse(reader.GetString("ID"));
                        data.type = int.Parse(reader.GetString("Type"));
                        data.username = reader.GetString("UserName");
                        data.password = reader.GetString("Password");
                        
                        //Debug.LogError(data.id + data.type + data.username + data.password);
                        
                        userDatas.Add(data);
                    }
                }
            }

            return userDatas;
        }
        #endregion

        public int ExecuteNonQuery(string SQLString)
        {
 
            using (MySqlCommand cmd = new MySqlCommand(SQLString, msc))
            {
                try
                {
                    int rows = cmd.ExecuteNonQuery();
                    return rows;
                }
                catch (MySqlException E)
                {
                    throw new Exception(E.Message);
                }
                finally
                {
                    //cmd.Dispose();
                }
            }
        }
    }
    
    /// <summary>
    /// 用户信息类
    /// </summary>
    public class UserData
    {
        public int id;
        public int type;
        public string username;
        public string password;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何简单下载指定版本的jdk

Oracle 官方提供的 Java Development Kit (JDK) 的归档站点。它主要用于存放历史版本的 JDK&#xff0c;供开发者下载和使用。 附上站点地址&#xff1a;Archived OpenJDK GA Releases 在这个站点可以找到各版本的jdk&#xff0c;简单实用~ 找到版本&#xff0c;点击tar.gz进…

【Origin+Python】使用External Python批量出图代码参考2

目录 前情提要进阶代码去除水印 前情提要 基础教程见链接: 【OriginPython】使用External Python批量出图代码参考 这里主要介绍一些进阶代码以及使用盗版origin要如何去除水印的方法&#xff01; ############################################################# 进阶代码 …

轻松上手MYSQL:MYSQL初识(上)

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《MYSQL入门》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 轻松上手MYSQL&#xff1a;从零开始构建你的数据库世界 &#x1f680; &#x1f680;欢迎来到My…

关于android studio无法连接到荣耀手机的超级简单终极解决办法

首先我要吐槽下网上那么多人那么多文章没一个有用的。亲测机型&#xff1a;荣耀40c 首先官方指导&#xff1a; 1.换数据线 2.开发者模式----》》》关闭锁屏----》》》打开唤醒 3.安装adb 驱动 下面几点是误区&#xff1a;千万别碰&#xff0c;浪费大家时间 被网上文章误解…

【Next】动态路由、加载 UI 和流式传输

动态路由 动态段作为 params 属性传递给 layout、page、route 和 generateMetadata 函数。 /app/blog/[slug]/page.tsx export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1> };/app/shop/[...slug]/pa…

SAP 技巧篇:Script脚本模拟人工操作批量录入数据

“ 现在大环境都讲人工智能、自动化办公等场景的应用&#xff0c;这里我们介绍一下SAP本身自带的自动化工具” 文章最后附最终脚本 01 — 背景需求 SAP&#xff1a;批量录入工具&#xff1a;LSMW/BDC/Script 三大工具 LSMW&#xff1a;应用场景多&#xff0c;实现方法多&am…

C# Solidworks二次开发:模型中实体Entity相关操作API详解

大家好&#xff0c;今天要讲的一些API是关于实体的相关API。 在开发的过程&#xff0c;很多地方会涉及到实体的相关操作&#xff0c;比如通过实体选中节点。下面就直接开始介绍API&#xff1a; &#xff08;1&#xff09;第一个API为Select4&#xff0c;这个API的含义为选中一…

工业物联网让“制造”变成“智造”!——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和工业的持续发展&#xff0c;物联网&#xff08;IoT&#xff09;技术的出现为制造业带来了前所未有的变革。工业物联网&#xff08;IIoT&#xff09;作为物联网技术在工业领域的应用&#xff0c;正在逐渐改变传统的制…

JavaScript:使用color-convert实现颜色色值转换

color-convert支持如下颜色格式的转换&#xff1a; rgb, hsl, hsv, hwb, cmyk, ansi, ansi16, hex文档 https://www.npmjs.com/package/color-converthttps://github.com/Qix-/color-convert 安装 $ npm install color-convert使用示例 import convert from color-convert…

深入理解Mesh Shader优化原理

参照AMD官网文章和GDC中其分享内容https://gpuopen.com/learn/mesh_shaders/mesh_shaders-index/总结自用&#xff0c;大佬直接原文。 一、传统顶点着色器管线与Mesh 着色器对比 具体之前也研究过可参照&#xff1a;DX12_Mesh Shaders Render 这里主要针对之前忽略的一些知识…

[BT]BUUCTF刷题第17天(4.15)

第17天&#xff08;共3题&#xff09; Web [强网杯 2019]高明的黑客 .tar.gz 是 Linux 系统下的压缩包&#xff0c;访问即可下载 打开后有3000多个php文件&#xff0c;通过题解得知需要写Python脚本找出合适的GetShell文件&#xff08;因为每个文件里都会通过system函数执行…

贵阳市人民政府副市长刘岚调研珈和科技

4月9日&#xff0c;贵阳市人民政府副市长、党组成员刘岚一行到珈和科技走访调研&#xff0c;珈和科技总经理冷伟热情接待了考察团&#xff0c;就企业算力需求与合作&#xff0c;特色产业园区建设&#xff0c;科技成果转化落地等方面进行深入交流。 贵阳市教育局局长李波&#…

Vmware 虚拟机自定义IP地址 - UbuntuServer2204

Vmware 虚拟机自定义IP地址 - UbuntuServer2204 设置网段 选择喜欢的网段&#xff0c; 例如&#xff1a; 166 自定义 IP地址 打开虚拟机&#xff0c; 输入命令查看网卡名 ip addr查看网卡配置文件 ls -al /etc/netplan/编辑网卡配置文件 sudo vim /etc/netplan/00-installe…

稀疏数组思想

稀疏数组的处理方法是&#xff1a; 1)记录数组一共有几行几列&#xff0c;有多少个不同的值 2)思想&#xff1a;把具有不同值的元素的行列及值记录在一个小规模的数组中&#xff0c;从而缩小程序的规模 例如下面原数组对应稀疏数组&#xff1a;

Git-常规用法-含解决分支版本冲突解决方法

目录 前置条件 已经创建了Gitee账号 创建一个远程仓库 Git的优点 版本控制 Git 下载 Git的使用 检查Git的是否安装成功 git的常用命令 常用流程 Git 分支 分支流程 Git 远程仓库 远程仓库流程 特殊 可能遇到的问题 前置条件 已经创建了Gitee账号 创建一个远程仓…

CTK插件框架学习-事件监听(07)

CTK插件框架学习-服务工厂(06)https://mp.csdn.net/mp_blog/creation/editor/137295686 一、简介 事件监听指当事件发生变化时所产生的通信&#xff0c;是动态的&#xff0c;对于已经发生过的事件无法监听 二、事件类型 1、框架事件 监听框架状态变化&#xff0c;因为监听…

【ARFoundation自学01】搭建AR框架,检测平面点击位置克隆物体

Unity开发ARFoundation相关应用首先安装ARFoundation包 然后设置XR 1.基础AR场景框架搭建 2.一个基本的点击克隆物体到识别的平面脚本 挂在XROrigin上 脚本AppController 脚本说明书 ## 业务逻辑 AppController 脚本旨在实现一个基本的 AR 应用程序功能&#xff1a;用户通过…

【24年物联网华为杯】赛题分析与初步计划

赛事介绍 官网链接&#xff1a;2024 年全国大学生物联网设计竞赛 (sjtu.edu.cn) 含金量&#xff1a;属于A类赛事 &#xff08;注意&#xff1a;很多搜索结果的序号是按照选入时间排列的&#xff0c;与含金量无关&#xff0c;华为杯是23年选入的&#xff09; Kimi Chat: 全国…

攻防世界09cookie

9-cookie Cookie是保存在客户端的纯文本文件。比如txt文件。所谓的客户端就是我们自己的本地电脑。当我们使用自己的电脑通过浏览器进行访问网页的时候&#xff0c;服务器就会生成一个证书并返回给我的浏览器并写入我们的本地电脑。这个证书就是cookie。一般来说cookie都是服务…

数字孪生技术在设备故障检测中的应用

数字孪生技术在设备故障检测中的应用主要体现在以下几个方面&#xff0c;数字孪生技术在设备故障检测中的应用展现了其在智能制造和工业互联网领域的重要价值&#xff0c;通过实时监测、故障预测、诊断分析和预测性维护等手段&#xff0c;显著提升了设备管理的智能化水平。北京…