首页 > 代码库 > Unity3D 连接MySQL数据库笔记4-Unity3d代码

Unity3D 连接MySQL数据库笔记4-Unity3d代码

新建Unity3D项目

新建一个 Plugins文件夹

把所需要的DLL放到 Plugins中

新建C#脚本 命名为ToMysql.cs

 

不多说了 ,直接上代码,很简单  有注释 ,大家一看就明白了

 

using UnityEngine;using System;using System.Collections;using System.Data;using MySql.Data.MySqlClient;public class ToMysql : MonoBehaviour {		      public static MySqlConnection dbConnection; /*mysql数据库连接对象*/     static string host = "";       static string id = "";       static string pwd = "";       static string database = "";     static string result = "";             private string strCommand ;       public static DataSet MyObj;  		public string connectionString;		public Vector2 pPos;	public Vector2 pSize;		public DataTable pdatatable;		public DataSet   pDataset;			public Vector2 conPos;	public Vector2 conSize;	 void Awake()	{				 host = "127.0.0.1";  /*mysql数据库服务器地址*/      id = "root";  /*mysql用户名*/      pwd = "123456";  /*密码*/      database = "test";/*数据库名*/        result = "";  /*mysql版本号信息暂存*/           strCommand = "Select uname from tuser"; 			 /*一些UI按钮的坐标配置信息11*/	  pPos = new Vector2( 50,50 );	  pSize = new Vector2(100,35);					 /*一些UI按钮的坐标配置信息22*/	  conPos = new Vector2( 300,60 );	  conSize = new Vector2( 150, 50 );				 /*初始给一个新增员工信息的时候的默认文本框内默认值*/		 pkey = "100291";		 name = "姓名";       sex = "男";	  age = "25";	  adress = "家庭详细住址";	  money = "2800";	}		     void OnGUI()       {  		   /*第一次连接到MySQL数据库*/		   ConnectFirstServer();		   /*显示连接到的MySQL数据库的版本号信息*/           GUILayout.Label(result);  				/*主要大列表显示员工信息的修改删除function*/		   ShowP_GUIData();						   /*添加员工信息*/			AddPerson();				   /*点了修改编辑信息后*/		  ShowEdit_PersonData();       }        /*关闭Unity程序*/    public static void OnApplicationQuit()     {          closeSqlConnection();      }    	/*第一次连接到MySQL数据库*/	public void ConnectFirstServer()	{		if( dbConnection == null )		{				  GUI.Button( new Rect(conPos.x ,conPos.y,conSize.x,conSize.y),"数据库Server地址");		   host = GUI.TextField(new Rect(conPos.x ,conPos.y+50,conSize.x,conSize.y),host );       	      	GUI.Button( new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),"mysql用户名");		   id = GUI.TextField(new Rect(conPos.x ,conPos.y+150,conSize.x,conSize.y),id );          GUI.Button( new Rect(conPos.x ,conPos.y+200,conSize.x,conSize.y),"密码");           pwd = GUI.TextField(new Rect(conPos.x ,conPos.y+250,conSize.x,conSize.y),pwd );				   GUI.Button( new Rect(conPos.x ,conPos.y+300,conSize.x,conSize.y),"数据库名");            database = GUI.TextField(new Rect(conPos.x ,conPos.y+350,conSize.x,conSize.y),database );				     connectionString = string.Format("Server = {0};Database = {1}; User = {2}; Password = {3};",host,database,id,pwd);           if(GUI.Button(new Rect(conPos.x+180 ,conPos.y+200,conSize.x,conSize.y),"登录数据库"))           {              openSqlConnection(connectionString);                MyObj = GetDataSet(strCommand);            /*读取数据函数Debug 管理员账号密码*/            ReaderData();			/*测试方法Debug 管理员账号密码*/			ShowDataSet();						/*重新读取p_info表里所有员工信息*/			SelectPdataSet();          }   											}							}	    // Connect to database      private static void openSqlConnection(string connectionString)     {          dbConnection = new MySqlConnection(connectionString);  		try{        dbConnection.Open();          result = dbConnection.ServerVersion;  /*获得MySql的版本*/		}		catch(MySqlException e)		{			Debug.Log( e.Message );			dbConnection = null;			host  = "服务器连接错";			id  = "用户名或密码错误";			pwd = "用户名或密码错误";		}		Debug.Log(result);    }          /*关闭Mysql连接*/    private static void closeSqlConnection()     {          dbConnection.Close();          dbConnection = null;      }            /*执行某些mysql语句*/    public static void doQuery(string sqlQuery)     {          IDbCommand dbCommand = dbConnection.CreateCommand();              dbCommand.CommandText = sqlQuery;          IDataReader reader = dbCommand.ExecuteReader();          reader.Close();          reader = null;         dbCommand.Dispose();          dbCommand = null;      }      #region Get DataSet   /*得到一个 dataSet对象*/    public  DataSet GetDataSet(string sqlString)      {           DataSet ds = new DataSet();          try          {              MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);              da.Fill(ds);               }          catch (Exception ee)          {                   Debug.Log("SQL:" + sqlString + "\n" + ee.Message.ToString());  			dbConnection = null;        }          return ds;          }      #endregion       /*Debug显示管理员账号密码*/    void ReaderData()    {        MySqlCommand mySqlCommand = new MySqlCommand("Select * from tuser;", dbConnection);        MySqlDataReader reader = mySqlCommand.ExecuteReader();        try        {            while (reader.Read())            {                if (reader.HasRows)                {                    print("uname:" + reader.GetString(0) + "--upwd:" + reader.GetString(1) );                }            }        }        catch (Exception e)        {           Debug.Log("查询失败了!"+ e.Message );			dbConnection = null;        }        finally        {            reader.Close();        }             }	/*Debug显示管理员账号密码*/	void ShowDataSet()	{		 string commandString = "Select * from tuser";                /* 创建DataSet命令对象和DataSet*/		if(dbConnection.State != ConnectionState.Open)		{             dbConnection = new MySqlConnection(connectionString);  		   try			{              dbConnection.Open();                result = dbConnection.ServerVersion;  /*获得MySql的版本*/		    }		    catch(MySqlException e)		    {		    	Debug.Log( e.Message );		      dbConnection = null;		    }				}        using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString, connectionString))		{               DataSet  Dataset = new DataSet();                /* 填充DataSet对象*/             DataAdapter.Fill(Dataset, "tuser");                /*从DataSet获取一个表*/                DataTable datatable = Dataset.Tables[0];		     for (int i = 0; i < datatable.Rows.Count; i++)                {                                                          Debug.Log( datatable.Rows[i]["uname"].ToString() );                    Debug.Log(  datatable.Rows[i]["upwd"].ToString() );		       }		}	}        /*显示员工信息function*/	void SelectPdataSet()	{		 string commandString = "Select * from p_info";                /* 创建DataSet命令对象和DataSet*/		if(dbConnection.State != ConnectionState.Open)		{           dbConnection = new MySqlConnection(connectionString);  		try{        dbConnection.Open();          result = dbConnection.ServerVersion;  /*获得MySql的版本*/		}		catch(MySqlException e)		{			Debug.Log( e.Message );		}				}           		using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString, connectionString))				{			    if(pDataset !=null )			     {				     pDataset = null;			     }                pDataset = new DataSet();                /* 填充DataSet对象*/               DataAdapter.Fill(pDataset, "p_info");                /*从DataSet获取一个表*/			    if(pdatatable != null)			    {				pdatatable = null;			    }                pdatatable = pDataset.Tables[0];		    		}							}		/*主要列表显示员工信息的修改删除function*/	void ShowP_GUIData()	{		if( pdatatable != null )		{		    if(pdatatable  == null)				 return;			try{			for (int i = 0; i < pdatatable.Rows.Count; i++)                {				    				                    GUI.Button(new Rect(pPos.x ,15 ,pSize.x,pSize.y ), "姓名" );                    GUI.Button(new Rect(pPos.x+100 ,15 ,pSize.x,pSize.y ),  "性别" );				    GUI.Button(new Rect(pPos.x+200 ,15 ,pSize.x,pSize.y ),  "年龄" );				    GUI.Button(new Rect(pPos.x+300 ,15 ,pSize.x +200,pSize.y ),   "家庭详细住址" );				    GUI.Button(new Rect(pPos.x+600,15 ,pSize.x,pSize.y ),   "月工资" );                                       GUI.Button(new Rect(pPos.x ,pPos.y +i*35 ,pSize.x,pSize.y ), pdatatable.Rows[i]["pname"].ToString() );                    GUI.Button(new Rect(pPos.x+100 ,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["psex"].ToString() );				    GUI.Button(new Rect(pPos.x+200 ,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["page"].ToString() );				    GUI.Button(new Rect(pPos.x+300 ,pPos.y +i*35 ,pSize.x +200,pSize.y ),  pdatatable.Rows[i]["padress"].ToString() );				    GUI.Button(new Rect(pPos.x+600,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["pmoney"].ToString() );												   if( GUI.Button(new Rect(pPos.x+710,pPos.y +i*35 ,pSize.x,pSize.y ),  "修改" ))				   {					       canEdit_person = true;					      					       Debug.Log( pdatatable.Rows[i]["pkey"].ToString() );					      Edit_Person( pdatatable.Rows[i]["pkey"].ToString() );										      pdatatable = null;				   }				  				  if( GUI.Button(new Rect(pPos.x+810,pPos.y +i*35 ,pSize.x,pSize.y ),  "删除" ) )				    {					    DeletePerson( pdatatable.Rows[i]["pkey"].ToString() );			     	}		       }						if( pdatatable.Rows.Count>=1)			{						   if( GUI.Button(new Rect(pPos.x+750,15 ,pSize.x,pSize.y ),   "增加员工信息" ))		       {								canAddPerson = true;				    pdatatable = null;									        }			}							}			catch 			{								Debug.Log(  "Some Error");			}					}					}	public string  pkey;	public string name;	public string sex;	public string age;	public string adress;	public string money;		public bool canAddPerson;	public int selGridInt = 0;	public string[] selsex = new string[] {"男", "女"};							public string sqlstr;	/*添加员工信息的function*/	void AddPerson()	{		if(canAddPerson )		{			GUI.Button( new Rect(150 ,conPos.y+100,conSize.x,conSize.y),"员工唯一编号" );		 pkey = GUI.TextField(new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),pkey );			       GUI.Button( new Rect(150 ,conPos.y+160,conSize.x,conSize.y),"姓名" );		 name = GUI.TextField(new Rect(conPos.x ,conPos.y+160,conSize.x,conSize.y),name );             GUI.Button( new Rect(150 ,conPos.y+220,conSize.x,conSize.y),"性别" );		selGridInt = GUI.SelectionGrid(new Rect(conPos.x ,conPos.y+220,100,30), selGridInt, selsex, 2);					GUI.Button( new Rect(150 ,conPos.y+270,conSize.x,conSize.y),"年龄" );         age = GUI.TextField(new Rect(conPos.x ,conPos.y+270,conSize.x,conSize.y),age );					GUI.Button( new Rect(150 ,conPos.y+330,conSize.x,conSize.y),"家庭详细住址" );		   adress = GUI.TextField(new Rect(conPos.x ,conPos.y+330,conSize.x,conSize.y),adress );					 GUI.Button( new Rect(150 ,conPos.y+380,conSize.x,conSize.y),"员工月工资" );			money = GUI.TextField(new Rect(conPos.x ,conPos.y+380,conSize.x,conSize.y),money );		  if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+220,conSize.x,conSize.y),"添加此员工信息") )			{				if( pkey.Trim()==""|| name.Trim()==""||					sex.Trim()==""||age.Trim()==""||					adress.Trim()==""||money.Trim()=="")				{										 pkey = "有错误请重新输入";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字";										return;									}								if( selGridInt == 0 )				{										sex = "男";				}				if( selGridInt == 1 )				{										sex = "女";				}												if( isNumberic(age)==false && isNumberic(money)==false )				{										 pkey = "有错误请重新输入";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字或超过了限制";										  return;				}								#region /*插入数据*/				  try{                   openSqlConnection(connectionString);   					if( dbConnection.State != ConnectionState.Open)					{				   dbConnection.Open();					}				    sqlstr = string.Format("INSERT INTO p_info(`pkey`, `pname`, `psex`, `page`, `padress`, `pmoney`) VALUES (‘{0}‘,‘{1}‘,‘{2}‘,‘{3}‘,‘{4}‘,‘{5}‘)",					                                          pkey,name,sex,age,adress,money);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();					Debug.Log("InsertData");					canAddPerson = false;					SelectPdataSet();									}				catch (MySqlException e){					pkey = "发生错误插入失败";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字或超过了限制";										Debug.Log("信息录入失败" + e.Message);				}				#endregion															}									if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+320,conSize.x,conSize.y),"返回") )			{				    canAddPerson = false;					SelectPdataSet();							}					}						}				/*检查输入的是否是数字*/	public bool isNumberic(string message)    {       /*判断是否为整数字符串*/       /*是的话则将其转换为数字并将其设为out类型的输出值、返回true, 否则为false*/       int result = -1;   /*result 定义*/        try        {          /*当数字字符串的为是少于4时,以下三种都可以转换,任选一种*/          /*如果位数超过4的话,请选用Convert.ToInt32() 和int.Parse()*/             result = int.Parse(message);                return true;        }        catch        {            return false;			Debug.Log("number false");        }   }			/*删除选中员工信息的方法*/	void DeletePerson(string Spkey)	{		#region /*删除数据*/				  try{                   openSqlConnection(connectionString);   					if( dbConnection.State != ConnectionState.Open)					{				   dbConnection.Open();					}			            				    sqlstr = string.Format("Delete from  p_info where pkey=‘{0}‘", Spkey);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();					Debug.Log("DeleteData");										SelectPdataSet();									}				catch (MySqlException e){															Debug.Log("删除失败" + e.Message);				}				#endregion	}		public bool canEdit_person;		/*传入选中要修改员工的主键pkey,并读取出对应数据给多个字段*/	void Edit_Person( string mpkey )	{		if(canEdit_person)		{						#region   检索当前选中的数据						 string commandString5 = string.Format("Select * from p_info where pkey=‘{0}‘", mpkey);			 Debug.Log(  commandString5);                /* 创建DataSet命令对象和DataSet*/		if(dbConnection.State != ConnectionState.Open)		{            dbConnection = new MySqlConnection(connectionString);  		    try				{               dbConnection.Open();                  result = dbConnection.ServerVersion;  /*获得MySql的版本*/		    }		     catch(MySqlException e)		     {			 Debug.Log( e.Message );		     }				}           		using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString5, connectionString))				{			                  DataSet spDataset = new DataSet();                /* 填充DataSet对象*/               DataAdapter.Fill(spDataset, "p_info");                /*从DataSet获取一个表*/			                   DataTable spdatatable = spDataset.Tables[0];										        pkey=  spdatatable.Rows[0]["pkey"].ToString() ;				name =	spdatatable.Rows[0]["pname"].ToString() ;				age =spdatatable.Rows[0]["page"].ToString() ;										adress=	spdatatable.Rows[0]["padress"].ToString() ;			      money=spdatatable.Rows[0]["pmoney"].ToString() ;		}											#endregion																			}	}			/*点击修改资料按钮后,详细显示当前选中的员工的信息,并提供文本框进行修改*/	void ShowEdit_PersonData()	{		if(canEdit_person)		{			/*		  GUI.Button( new Rect(150 ,conPos.y+100,conSize.x,conSize.y),"员工唯一编号" );		 pkey = GUI.TextField(new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),pkey );			*/       GUI.Button( new Rect(150 ,conPos.y+160,conSize.x,conSize.y),"姓名" );		 name = GUI.TextField(new Rect(conPos.x ,conPos.y+160,conSize.x,conSize.y),name );             GUI.Button( new Rect(150 ,conPos.y+220,conSize.x,conSize.y),"性别" );		selGridInt = GUI.SelectionGrid(new Rect(conPos.x ,conPos.y+220,100,30), selGridInt, selsex, 2);					GUI.Button( new Rect(150 ,conPos.y+270,conSize.x,conSize.y),"年龄" );         age = GUI.TextField(new Rect(conPos.x ,conPos.y+270,conSize.x,conSize.y),age );					GUI.Button( new Rect(150 ,conPos.y+330,conSize.x,conSize.y),"家庭详细住址" );		   adress = GUI.TextField(new Rect(conPos.x ,conPos.y+330,conSize.x,conSize.y),adress );					 GUI.Button( new Rect(150 ,conPos.y+380,conSize.x,conSize.y),"员工月工资" );			money = GUI.TextField(new Rect(conPos.x ,conPos.y+380,conSize.x,conSize.y),money );						Debug.Log("EditPersonData");			if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+220,conSize.x,conSize.y),"返回主页") )			{					canEdit_person = false;					SelectPdataSet();			}									 if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+320,conSize.x,conSize.y),"修改员工信息") )			{				if( pkey.Trim()==""|| name.Trim()==""||					sex.Trim()==""||age.Trim()==""||					adress.Trim()==""||money.Trim()=="")				{										 pkey = "有错误请重新输入";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字";										return;									}								if( selGridInt == 0 )				{										sex = "男";				}				if( selGridInt == 1 )				{										sex = "女";				}												if( isNumberic(age)==false && isNumberic(money)==false )				{										 pkey = "有错误请重新输入";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字或超过了限制";										  return;				}								#region /*更新数据*/				  try{                   openSqlConnection(connectionString);   					if( dbConnection.State != ConnectionState.Open)					{				   dbConnection.Open();					}									    sqlstr = string.Format("UPDATE p_info SET  pname=‘{0}‘, psex=‘{1}‘, page=‘{2}‘, padress=‘{3}‘, pmoney=‘{4}‘WHERE pkey = ‘{5}‘",					                                          name,sex,age,adress,money ,pkey);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();					Debug.Log("UpdateData");					canEdit_person = false;					SelectPdataSet();									}				catch (MySqlException e){					pkey = "发生错误更新失败";		             name = "姓名";                     sex = "性别必须为男或女";	                 age = "年龄必须为数字";	                 adress = "家庭详细住址";	                  money = "月工资必须为数字或超过了限制";										Debug.Log("信息录入失败" + e.Message);				}				#endregion															}					}	}	}

  

新建一个 GameObject,将这个脚本拖放到 GameObject对象上

点击运行,输入 

服务器地址:127.0.0.1

用户名:root

密码:123456

需要访问的数据库db名:test

点击  登录数据库

 

 

 

如果登录成功,会看到我们刚才插入的信息

 

点击增加员工信息

 

 

嘿嘿,点击添加此员工信息

 

 

成功!嘿嘿!

 

点击删除《深华东》 试试

 

删除成功!

点击修改  张三的信息

 

修改性别为女,年龄为18,工资为800,点击修改员工信息

 

修改成功!

有的朋友反应,发布无法连接,我这里测试是没有问题,

 

具体请看 ,发布后连接数据库如下图

 

欢迎与我交流Unity3D技术,QQ2360450496