Unity与服务器Mysql数据库进行交互
数据连接类using MySql.Data.MySqlClient;using System;using System.Data;public class MySqlAcces{//连接类对象private static MySqlConnection mySqlConnection;//IP地址private static string h...
Mysql语句推荐一片文章吧,挺全的 https://www.cnblogs.com/zhuyongzhe/p/7686098.html
1、unity连接数据库需要的库文件
需要的Dll文件可以再Unity安装目录Editor-》Data文件夹下查找,这里提供一个链接:https://pan.baidu.com/s/1R2TGe40Yjuv49Y8xXwvXeg
提取码:xjsa 自行下载,这里放在plugins文件夹下:
2、创建数据库连接类
这里主要是封装数据库的连接、打开、关闭、查询等方法,方法类不多说,上代码:
using MySql.Data.MySqlClient;
using System;
using System.Data;
public class MySqlAcces
{
//连接类对象
private static MySqlConnection mySqlConnection;
//IP地址
private static string host;
//端口号
private static string port;
//用户名
private static string userName;
//密码
private static string password;
//数据库名称
private static string databaseName;
//string sqlCon = "server=localhost;user id=root;password=WANGshuai123...;data=userTable";
/// <summary>
/// 构造方法
/// </summary>
/// <param name="_host">ip地址</param>
/// <param name="_userName">用户名</param>
/// <param name="_password">密码</param>
/// <param name="_databaseName">数据库名称</param>
public MySqlAcces(string _host, string _port, string _userName, string _password, string _databaseName)
{
host = _host;
port = _port;
userName = _userName;
password = _password;
databaseName = _databaseName;
OpenSql();
}
/// <summary>
/// 打开数据库
/// </summary>
public void OpenSql()
{
try
{
string mySqlString = string.Format("Database={0};Data Source={1};User Id={2};Password={3};port={4}"
, databaseName, host, userName, password, port);
mySqlConnection = new MySqlConnection(mySqlString);
//if(mySqlConnection.State == ConnectionState.Closed)
mySqlConnection.Open();
}
catch (Exception e)
{
throw new Exception("服务器连接失败,请重新检查MySql服务是否打开。" + e.Message.ToString());
}
}
/// <summary>
/// 关闭数据库
/// </summary>
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);
}
/// <summary>
/// 执行SQL语句
/// </summary>
/// <param name="sqlString">sql语句</param>
/// <returns></returns>
private DataSet QuerySet(string sqlString)
{
if (mySqlConnection.State == ConnectionState.Open)
{
DataSet ds = new DataSet();
try
{
MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(sqlString, mySqlConnection);
mySqlAdapter.Fill(ds);
}
catch (Exception e)
{
throw new Exception("SQL:" + sqlString + "/n" + e.Message.ToString());
}
finally
{
}
return ds;
}
return null;
}
}
3、连接数据库
这里是执行脚本,需要挂到对象上,这里是读取数据库用户名和密码的一个简单登录脚本:
using System.Collections;
using System.Collections.Generic;
using System.Data;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Data : MonoBehaviour,IPointerClickHandler
{
public InputField userNameInput;
public InputField passwordInput;
//提示用户登录信息
private Text loginMessage;
//IP地址
public string host;
//端口号
public string port;
//用户名
public string userName;
//密码
public string password;
//数据库名称
public string databaseName;
//封装好的数据库类
MySqlAcces mysql;
private void Start()
{
loginMessage = GameObject.FindGameObjectWithTag("LoginMessage").GetComponent<Text>();
mysql = new MySqlAcces(host, port, userName, password, databaseName);
}
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.pointerPress.name == "loginButton")
{ //如果当前按下的按钮是注册按钮
OnClickedLoginButton();
}
}
/// <summary>
/// 按下登录按钮
/// </summary>
private void OnClickedLoginButton()
{
mysql.OpenSql();
string loginMsg = "";
DataSet ds = mysql.Select("usertable", new string[] { "level" }, new string[] { "`" + "account" + "`", "`" + "password" + "`" }, new string[] { "=", "=" }, new string[] { userNameInput.text, passwordInput.text });
if (ds != null)
{
DataTable table = ds.Tables[0];
if (table.Rows.Count > 0)
{
loginMsg = "登陆成功!";
loginMessage.color = Color.green;
Debug.Log("用户权限等级:" + table.Rows[0][0]);
}
else
{
loginMsg = "用户名或密码错误!";
loginMessage.color = Color.red;
}
loginMessage.text = loginMsg;
}
mysql.CloseSql();
}
}
4、挂载运行
这里host可以写本地数据库,就是localhost,如果是连接服务器数据库写服务器地址就行了,注意连接服务器地址是,地址格式不要加"http://",直接地址就行。
5、可能遇到的问题
有可能是服务器数据库没有配置3306端口,或者没有允许服务器数据库远程连接;
配置步骤:
1、首先确定服务器 3306的端口号是否开启:我这里是阿里云服务器
如果这里没有开3306端口,在右上角添加安全组规则
2、配置服务器Mysql数据库
(我是用PHPStudy配置的服务器)
(1)先在服务器中通过命令行方式(打开phpstudy界面->右下角其他菜单选项->MySQL工具->MySQL命令行)
登录mysql:mysql -u root -p 密码 (如果mysql初始账号和密码都是root)
这里直接输入密码 root 回车
(2)执行use mysql; 下面类似不在演示
(3)执行grant all privileges on . to root@’%’ identified by ‘密码’;
密码改为你的数据库登录密码,默认root
(4)执行 flush privileges;
感谢多多支持,多多是谁?哈哈,欢迎交流。
更多推荐
所有评论(0)