MySQL与Unity的基本交互

本文介绍如何在Unity中使用MySQL数据库,包括导入DLL文件、基本SQL语句介绍、数据库操作封装及具体应用案例,如创建表、插入和查询数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.准备工作

(1)Unity使用MySQL需要导入以下两个dll文件,注意文件的.net版本。


(2)进行交互前了解数据库基本的增删改查语句

->增:insert into 表名 (数据1,数据2,数据3,......) values ('值1','值2','值3',......)

->删:delete from 表名 where 限制条件

->改:update 表名 set 目标值 where 限制条件 

->查:select 数据1 from 表名 where 限制条件

->建表:create table 表名 (数据1 类型,数据2 类型,数据3 类型,......

->删表:drop table 表名

(3)新建脚本注意引入命名空间

二.脚本编写

(1)数据库功能封装(可以将核心sql语句一并进行封装,然后在调用时传参,这里为了提高可读性只封装基本实现方法)

public class SqlAccess {
	public static MySqlConnection mySqlConnection;
	//数据库名称
	public static string database = "daybreak";
	//数据库IP
	private static string host = "localhost";
	//用户名
	private static string username = "root";
	//用户密码
	private static string password = "root";	
    
    public static string sql = string.Format("database={0};server={1};user={2};password={3};port={4}",
    database, host, username, password, "3306");

    public static MySqlConnection con;
    private MySqlCommand com;
    
    #region BaseOperation
    /// <summary>
    /// 构造方法开启数据库
    /// </summary>
    public SqlAccess()
    {
        con = new MySqlConnection(sql);
        OpenMySQL(con);       
    }    
    /// <summary>
    /// 启动数据库
    /// </summary>    
    /// <param name="con"></param>
    public void OpenMySQL(MySqlConnection con)
    {                
        con.Open();
        Debug.Log("数据库已连接");
    }
    /// <summary>
    /// 创建表
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    public void CreateTable(string sql,MySqlConnection con)
    {
        MySqlCommand com = new MySqlCommand(sql, con);
        int res = com.ExecuteNonQuery();
    }
    /// <summary>
    /// 插入数据
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    public void InsertInfo(string sql,MySqlConnection con)
    {
        MySqlCommand com = new MySqlCommand(sql, con);
        int res = com.ExecuteNonQuery();
    }
    /// <summary>
    /// 删除数据
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    public void DeleteInfo(string sql,MySqlConnection con)
    {
        MySqlCommand com = new MySqlCommand(sql, con);
        int res = com.ExecuteNonQuery();
    }
    /// <summary>
    /// 修改数据
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    public void UpdateInfo(string sql,MySqlConnection con)
    {
        MySqlCommand com = new MySqlCommand(sql, con);
        int res = com.ExecuteNonQuery();
    }
    /// <summary>
    /// 查询数据
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    public Dictionary<int,List<string>> QueryInfo(string sql,MySqlConnection con)
    {
        int indexDic = 0;
        int indexList = 0;
        Dictionary<int, List<string>> dic = new Dictionary<int, List<string>>();        
        MySqlCommand com = new MySqlCommand(sql, con);
        MySqlDataReader reader =  com.ExecuteReader();        
        while (true)
        {
            if (reader.Read())
            {
                List<string> list = new List<string>();
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    list.Add(reader[indexList].ToString());
                    indexList++;
                }
                dic.Add(indexDic, list);
                indexDic++;
                indexList = 0;
            }
            else
            {
                break;
            }
        }
        return dic;       
    }    
    /// <summary>
    /// 关闭数据库
    /// </summary>
    public void CloseMySQL()
    {
        (new MySqlConnection(sql)).Close();
        Debug.Log("关闭数据库");
    }
	#endregion

}
(2)数据库功能实现

public class StudentSql : MonoBehaviour
{
    /// <summary>
    /// 工具类对象
    /// </summary>
    private SqlAccess sqlAce;

    MySqlConnection con;
    void Start()
    {
        //CreateStudentTable();
        //InsertInfomation();
        //QueryInfomation1();
        //QueryInfomation2();
        //UpdateInfomation();
        //DeleteInfomation();
        DeleteTable();
    }
    //1、建立一个“学生”表Student,它由学号Sid、姓名Sname、性别Ssex、年龄Sage、所在专业Sdept五个属性组成,类型自己定义
    /// <summary>
    /// 创建学生表
    /// </summary>
    public void CreateStudentTable()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql = ("create table Student(Sid varchar(12),Sname varchar(8),Sage int,Sdept varchar(8))");
        sqlAce.CreateTable(sql, con);
        sqlAce.CloseMySQL();
    }
    //2、添加自己所在组的所有成员到表中。
    /// <summary>
    /// 学生表插值
    /// </summary>
    public void InsertInfomation()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql1 = ("insert into Student(Sid,Sname,Sage,Sdept) values('1001','学生A','20','土木工程')");
        string sql2 = ("insert into Student(Sid,Sname,Sage,Sdept) values('1002','学生B','15','计算机与科学')");
        string sql3 = ("insert into Student(Sid,Sname,Sage,Sdept) values('1003','学生C','16','电子商务')");
        string sql4 = ("insert into Student(Sid,Sname,Sage,Sdept) values('1004','学生D','25','电子竞技')");
        string sql5 = ("insert into Student(Sid,Sname,Sage,Sdept) values('1005','学生E','23','网络工程')");
        string[] str = new string[5] { sql1, sql2, sql3, sql4, sql5 };
        for (int i = 0; i < str.Length; i++)
        {
            sqlAce.InsertInfo(str[i], con);
        }
        sqlAce.CloseMySQL();
    }
    //3、查询年龄在18至24岁之间的学生的姓名和专业 
    /// <summary>
    /// 查询学生信息01
    /// </summary>
    public void QueryInfomation1()
    {
        sqlAce = new SqlAccess();       
        con = SqlAccess.con;        
        string sql = ("select Sname,Sdept from Student where Sage<'24' and Sage>'18' ");
        Dictionary<int, List<string>> dic = sqlAce.QueryInfo(sql, con);
        for (int i = 0; i < dic.Count; i++)
        {
            Debug.Log(string.Format("学生姓名:{0} 学生专业:{1}", dic[i][0], dic[i][1]));
        }
        sqlAce.CloseMySQL();
    }
    //4、查询所有学生的学号与姓名
    /// <summary>
    /// 查询学生信息02
    /// </summary>
    public void QueryInfomation2()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql = ("select Sid,Sname from Student");
        Dictionary<int, List<string>> dic = sqlAce.QueryInfo(sql, con);
        for (int i = 0; i < dic.Count; i++)
        {
            Debug.Log(string.Format("学生学号:{0} 学生姓名:{1}", dic[i][0], dic[i][1]));
        }       
        sqlAce.CloseMySQL();
    }
    //5、将自己的年龄改为18岁
    /// <summary>
    /// 更新学生信息
    /// </summary>
    public void UpdateInfomation()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql = ("update Student set Sage='18' where Sname='学生A'");
        sqlAce.UpdateInfo(sql, con);
        sqlAce.CloseMySQL();
    }
    //6、删除学号为单数的学生记录
    /// <summary>
    /// 删除表信息
    /// </summary>
    public void DeleteInfomation()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql2 = ("select Sid from Student");
        Dictionary<int, List<string>> dic = sqlAce.QueryInfo(sql2, con);
        sqlAce.CloseMySQL();
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        for (int i = 0; i < dic.Count; i++)
        {
            if (Convert.ToInt32(dic[i][0]) % 2 == 1)
            {
                string sql1 = string.Format("delete from Student where Sid='{0}'", dic[i][0]);
                sqlAce.DeleteInfo(sql1, con);
            }
        }
        sqlAce.CloseMySQL();
    }
    /// <summary>
    /// 删除表
    /// </summary>
    public void DeleteTable()
    {
        sqlAce = new SqlAccess();
        con = SqlAccess.con;
        string sql = ("drop table Student");
        sqlAce.DeleteInfo(sql, con);
    }

}

<think>好的,我现在需要帮助用户解决在Unity中连接操作MySQL数据库的问题。首先,我需要回忆一下相关的知识,可能之前学过或者接触过类似的内容。记得Unity通常使用C#作为脚本语言,所以可能需要用C#来连接MySQL。不过,Unity本身不直接支持MySQL,可能需要引入外部库或者插件。 用户提到的引用[1]里提到需要导入MySQL的驱动包到Plugins文件夹,这可能是指MySQL Connector/NET,也就是官方的.NET数据驱动。所以第一步应该是下载这个驱动,然后导入到Unity项目中。但是Unity的版本.NET版本可能会影响兼容性,需要注意选择合适的驱动版本。 接下来,用户可能需要在C#脚本中使用MySqlConnection类来建立连接,然后使用MySqlCommand执行SQL语句。记得在连接字符串中指定服务器地址、端口、数据库名、用户名密码这些参数。另外,异常处理也很重要,比如捕获MySqlException,避免程序崩溃。 操作数据库的基本步骤包括:建立连接、打开连接、创建命令对象、执行查询或非查询操作、处理结果、关闭连接。对于查询操作,可能需要使用MySqlDataReader来读取数据,而对于插入、更新、删除,则使用ExecuteNonQuery方法。 用户可能还会关心如何安全地存储数据库凭证,比如不直接在代码中写死,而是使用配置文件或者其他安全方式。此外,异步操作可能也是需要考虑的,避免主线程阻塞,尤其是在Unity这样的游戏引擎中,保持流畅性很重要。 还有可能的问题包括跨平台兼容性,比如在Android或iOS上是否支持MySQL连接,可能需要额外的配置或者使用不同的方法。此外,性能优化方面,比如使用连接池,合理管理连接的开闭,避免资源泄漏。 需要确保用户按照步骤正确导入驱动,并在代码中正确引用命名空间,比如using MySql.Data.MySqlClient;。如果出现编译错误,可能是驱动版本不兼容或者没有正确放置到Plugins文件夹中。 最后,生成相关问题时,要考虑用户可能进一步想知道的内容,比如异常处理的具体方法,如何防止SQL注入攻击,或者是否有其他数据库更适合Unity项目,比如SQLite或者Unity自带的PlayerPrefs等。</think>在Unity中连接操作MySQL数据库需要引入MySQL驱动包并编写C#脚本,以下是具体步骤: ### 一、环境准备 1. 下载MySQL Connector/NET驱动包(如`MySql.Data.dll`)[^1] 2. 在Unity项目中创建`Plugins`文件夹,将驱动包导入 3. 检查Unity的API Compatibility Level设置为`.NET Standard 2.0`或`.NET Framework` ### 二、连接数据库 ```csharp using MySql.Data.MySqlClient; public class MySQLManager : MonoBehaviour { private MySqlConnection connection; void Start() { string server = "127.0.0.1"; string database = "mydb"; string uid = "root"; string password = "123456"; string port = "3306"; string connStr = $"Server={server};Port={port};Database={database};Uid={uid};Pwd={password};"; connection = new MySqlConnection(connStr); try { connection.Open(); Debug.Log("连接成功"); } catch (MySqlException ex) { Debug.LogError("连接失败:" + ex.Message); } } } ``` ### 三、数据库操作示例 #### 1. 查询数据 ```csharp string query = "SELECT * FROM players"; MySqlCommand cmd = new MySqlCommand(query, connection); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Debug.Log($"玩家ID: {reader["id"]}, 名称: {reader["name"]}"); } reader.Close(); ``` #### 2. 插入数据 ```csharp string insertQuery = "INSERT INTO players (name, score) VALUES (@name, @score)"; MySqlCommand cmd = new MySqlCommand(insertQuery, connection); cmd.Parameters.AddWithValue("@name", "Player1"); cmd.Parameters.AddWithValue("@score", 100); int affectedRows = cmd.ExecuteNonQuery(); ``` ### 四、注意事项 1. WebGL平台不支持直接连接MySQL,需通过后端接口中转 2. 生产环境应加密存储连接信息 3. 使用参数化查询防止SQL注入攻击 4. 操作完成后调用`connection.Close()`释放资源
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值