在 Unity 中连接 MySQL 数据库,其核心原理是借助数据库连接驱动程序,搭建起 Unity 应用程序与 MySQL 数据库服务器之间的通信桥梁,进而实现数据的交互。
- 选择数据库连接驱动
为了让 Unity 能够与 MySQL 数据库进行通信,需要使用专门的数据库连接驱动。常用的是 MySQL Connector/NET,它是 MySQL 官方提供的.NET 数据库连接驱动,可实现.NET 应用程序(包括 Unity 项目)与 MySQL 数据库的连接与交互。该驱动基于ADO.NET架构,提供了一系列类和方法,方便开发者进行数据库操作。 - 建立数据库连接
原理
要建立与 MySQL 数据库的连接,需提供数据库服务器的相关信息,如服务器地址、端口号、数据库名称、用户名和密码等。这些信息会被封装成一个连接字符串,通过 MySQL Connector/NET 中的MySqlConnection类来创建连接对象。当调用连接对象的Open方法时,驱动程序会根据连接字符串的信息尝试与 MySQL 数据库服务器建立 TCP/IP 连接。如果服务器验证用户名和密码无误,就会建立起连接,使得后续的数据交互成为可能。
测试代码如下:
using MySql.Data.MySqlClient;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 连接数据库 包括增删改查功能
/// </summary>
public class LianJie : MonoBehaviour
{
//database代表你要连接的数据库的名字
private const string datebase = "server=127.0.0.1;user=wcl;password=123456;database=tool;";
private MySqlConnection connection = null;
string sql;
public bool kaiqi = false;
private int time, temperature, humidity;
private string timee;
void Start()
{
connection = new MySqlConnection(datebase);
connection.Open();
kaiqi = true;
//查询 表中数据
// sql = "select * from user";
//查询某一段时间的数据的第一种方法 from大小写无影响
//sql = "select * FROM user where time between '2021-6-21 09:45:00' and '2021-6-21 09:47:00'";
//query(sql);
//查询某一段时间的数据的第二种方法
sql = "SELECT * from user where time >= '2021-6-21 09:45:00' and time < '2021-6-21 09:47:00'";
query(sql);
//插入
//sql = "insert into user values('3','我的','123')";
//insert(sql);
//sql = "delete from user where id = 2";
//delete(sql);
//sql = "select * from user";
//query(sql);
//修改
//sql = "update user set username = '100' where id = 78";
//updateData(sql);
//StartCoroutine("ZengJia");
}
//写入点
public void Insertting(string time,int username,int password)
{
//string sqlInsert = "insert into user values('"+ time+"','" +username+"','"+password+"')";
connection = new MySqlConnection(datebase);
connection.Open();
string sqlInsert = "insert into user(time,username,password) values('" + time + "','" + username + "','" + password + "')";
MySqlCommand comd2 = new MySqlCommand(sqlInsert, connection);
int resule = comd2.ExecuteNonQuery();
Debug.Log("添加成功");
//connection.Close();
}
IEnumerator ZengJia()
{
while (kaiqi)
{
time += 15;
timee = System.DateTime.Now.ToLocalTime().ToString ("yyyy-MM-dd HH:mm:ss");
temperature = Random.Range(0, 301);
humidity = Random.Range(0, 50);
Insertting(timee,temperature, humidity);
yield return new WaitForSeconds(5f);
}
StopAllCoroutines();
connection.Close();
}
private void OnDisable()
{
kaiqi = false;
connection.Close();
}
//查询
private void query(string sql)
{
MySqlCommand command = new MySqlCommand(sql, connection);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
print("id:" + reader.GetInt32("id") +
"time:" + reader.GetString("time") + "username:" + reader.GetString("username") + " password" + reader.GetString("password"));
}
command.Dispose();
}
//插入
private void insert(string sql)
{
MySqlCommand command = new MySqlCommand(sql, connection);
int n = command.ExecuteNonQuery();
if (n > 0)
print("插入成功");
else
print("插入失败");
command.Dispose();
}
//删除
private void delete(string sql)
{
MySqlCommand command = new MySqlCommand(sql, connection);
int n = command.ExecuteNonQuery();
command.Dispose();
}
//改
private void updateData(string sql)
{
MySqlCommand command = new MySqlCommand(sql, connection);
int n = command.ExecuteNonQuery();
command.Dispose();
}
}