大家好,我是毕星好雨,之前做过一期unity连接数据库的视频,本来是一期开发日志,后来有很多小伙伴想学习这个功能。今天从头连接一个给大家看看。由于我也是查阅各种资料偶然成功的,其中的原理我也不太懂,所以只能演示一遍如何连接。具体原理还是请大家自己探索吧!
那么现在直接开始操作。
如果嫌啰嗦,文章末尾有代码全貌!
1.先导入MySQL里的unity插件,插件路径是C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.8,当然不是v4.8其他的也可以,还有就是把这个MySql.Web删除,不然打包的时候会出错,你做就对了。
全部复制。我在unity里创建了一个Plugins的文件夹,如果以后导入其他插件,都放这里,每种插件都单独放一个子文件夹里,总之这样就是很有条理。
2.代码环节,先引入命名空间。
using MySql.Data.MySqlClient;
然后写好服务器的一些信息,包括服务器地址,端口号,用户名,密码,数据库名称,字符格式。
//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");
写好后,在start里打开数据库,打开后判断一下是否打开了,然后debug一下。最后不要忘了关闭数据库。(此功能全部代码如下)
//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");
// Start is called before the first frame update
void Start()
{
//打开数据库
conn.Open();
//判断是否连接成功
if (conn.State == System.Data.ConnectionState.Open)
{
Debug.Log("连接成功");
}
//关闭数据库
conn.Close();
}
由于目标计算机积极拒绝,无法连接。记住要打开服务。
再次运行一下,很好,连接成功了。
3.数据库功能之查找功能,判断某个数据是否存在。
首先写一个名字变量。(我要查询是否存在这个名字变量的值)
public string 名字;
写一个查找方法,然后新建一个局部变量列表,用来存放这个数据类型的所有数据。
比如要取一个名字,那么拿这个名字和列表的所有名字做比较,这样子。
public void 判断是否存在()
{
//列表
List<string> 列表 = new List<string>();
//查询
MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
//读取
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
列表.Add(reader.GetString("名字"));
}
reader.Close();
//对比
foreach (var item in 列表)
{
if (列表.Contains(名字))
{
Debug.Log("该用户名已存在");
break;
}
else
{
Debug.Log("不存在该用户名");
break;
}
}
}
写好后在start里调用一下
select(即为查找)名字from(即为从的意思)users(即表的名字)然后读取并添加到列表,然后关闭读取。
最后用foreach查询列表判断是否存在。
我查询一个名字叫“毕星好雨”的玩家,然后该玩家存在。
随便输入一个不存在的名字,会显示玩家不存在。
这是我库里的一些数据
运行后的两种结果
目前代码的全貌如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//
using MySql.Data.MySqlClient;
public class SQL : MonoBehaviour
{
public string 名字;
//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");
// Start is called before the first frame update
void Start()
{
//打开数据库
conn.Open();
//判断是否连接成功
if (conn.State == System.Data.ConnectionState.Open)
{
Debug.Log("连接成功");
}
//判断数据是否存在
判断是否存在();
//关闭数据库
conn.Close();
}
public void 判断是否存在()
{
//列表
List<string> 列表 = new List<string>();
//查询
MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
//读取
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
列表.Add(reader.GetString("名字"));
}
reader.Close();
//对比
foreach (var item in 列表)
{
if (列表.Contains(名字))
{
Debug.Log("该用户名已存在");
break;
}
else
{
Debug.Log("不存在该用户名");
break;
}
}
}
}
4.读取数据
select 要查询的数据 form 表名 where 账号(数据类型)=账号(变量名)。
public void 读取数据()
{
//查找---------------------------------------要查询的数据------------表名------------查询数据的位置----输入的位置----------
MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + " where " + "账号" + "='" + 账号 + "'", conn);
//读取
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//打印
Debug.Log(reader.GetString("名字"));
}
reader.Close();
}
意思就是我要在哪个表里,哪个账号是我当前输入的账号,的名字的值。
可以查出账号是“1”的玩家的名字叫“毕星好雨”。(上面有数据库部分信息)
5.接下来三个功能代码如下,同理:
a.修改数据(update),也是更新数据(例如玩家修改名字,玩家道具数量的改变等等)
MySqlCommand cmd = new MySqlCommand("update users set 名字='" + 修改名字 + "'where 账号 ='" + 账号 + "'", conn);
b.添加数据(insert into),玩家在注册账号的时候,名字没有占用,那么触发注册成功事件,添加该玩家的账号信息即可。
MySqlCommand cmd = new MySqlCommand("insert into users set 名字 ='" + 注册的名字 + "'" + ",密码='" + 注册的密码 + "'", conn);
c.删除数据(delete),一般玩家用不上,而且代码也简单不做解释。
MySqlCommand cmd = new MySqlCommand("delete from users where 账号=15", conn);
最后附上整体代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//
using MySql.Data.MySqlClient;
public class SQL : MonoBehaviour
{
public string 账号;//此变量用来 : 输入账号查找名字
public string 名字;//此变量用来 : 查找名字是否重复
public string 修改名字;//此变量用来 : 修改变量
public string 注册的名字, 注册的密码;//此变量用来 : 注册(添加数据)
//-------------------------------------------------------服务器地址-------端口号-----用户名-------密码---------------数据库名称------------字符------------
public MySqlConnection conn = new MySqlConnection("server=127.0.0.1;port=3306;User Id=root;password=b292970314;database=bixinghaoyu;charset=utf8mb4");
// Start is called before the first frame update
void Start()
{
//打开数据库
conn.Open();
//判断是否连接成功
if (conn.State == System.Data.ConnectionState.Open)
{
Debug.Log("连接成功");
}
//判断数据是否存在
判断是否存在();
//
读取数据();
//
//关闭数据库
conn.Close();
}
public void 判断是否存在()
{
//列表
List<string> 列表 = new List<string>();
//查询
MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + "", conn);
//读取
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
列表.Add(reader.GetString("名字"));
}
reader.Close();
//对比
foreach (var item in 列表)
{
if (列表.Contains(名字))
{
Debug.Log("该用户名已存在");
break;
}
else
{
Debug.Log("不存在该用户名");
break;
}
}
}
public void 读取数据()
{
//查找---------------------------------------要查询的数据------------表名------------查询数据的位置----输入的位置----------
MySqlCommand cmd = new MySqlCommand("select " + "名字" + " from " + "users" + " where " + "账号" + "='" + 账号 + "'", conn);
//读取
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//打印
Debug.Log(reader.GetString("名字"));
}
reader.Close();
}
public void 修改数据()
{
MySqlCommand cmd = new MySqlCommand("update users set 名字='" + 修改名字 + "'where 账号 ='" + 账号 + "'", conn);
cmd.ExecuteNonQuery();
}
public void 添加数据()
{
MySqlCommand cmd = new MySqlCommand("insert into users set 名字 ='" + 注册的名字 + "'" + ",密码='" + 注册的密码 + "'", conn);
cmd.ExecuteNonQuery();
}
public void 删除数据()
{
MySqlCommand cmd = new MySqlCommand("delete from users where 账号=15", conn);
cmd.ExecuteNonQuery();
}
}
文章到这就结束了,掌握C#的方式查找和增删改查MySQL就已经可以做出一个登录功能了,也可以做保存玩家数据的功能。
B站有我之前做的一些unity的开发日志,后面有机会还会更新开发日志的最新进度,感兴趣的小伙伴可以来一手关注,以后有什么不懂的或者想看的都可以评论区留言。