using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Data;
using System.IO;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
public class WriteSQLcfg : MonoBehaviour {
static MySqlConnection dbConnection;
string query;
DataSet ds_sql;
DataTable dt_sql;
public static List<string> nameArray = new List<string>();
public string dataBaseName;
void Start () {
}
void Update () {
if (Input.GetKeyDown(KeyCode.W))
{
OpenSql();
CreatUser("admin", "admin");
CreateDataBase(dataBaseName);
GetObjectNameToArray<string>("cfg", ".xml");
//读取配置文件并导入数据库
for (int i = 0; i < nameArray.Count; i++)
{
string fileName = Application.streamingAssetsPath + "/cfg/" + nameArray[i] + ".xml";
ds_sql = ReadBatFile(fileName);
dt_sql = ds_sql.Tables[0];
List<string> list_columns = new List<string>();
List<string> list_rows = new List<string>();
foreach (DataColumn colum in dt_sql.Columns)
{
list_columns.Add(colum.ToString());
}
CreatTable(nameArray[i], dataBaseName, list_columns.ToArray());
Dictionary<int, List<string>> tempValue = new Dictionary<int, List<string>>();
int key = 0;
foreach (DataRow row in dt_sql.Rows)
{
tempValue[key] = new List<string>();
foreach (DataColumn column in dt_sql.Columns)
{
tempValue[key].Add(row[column].ToString());
}
key++;
}
//写入数据
for (int index = 0; index < tempValue.Count; index++)
{
InsertInfo(nameArray[i], list_columns.ToArray(), tempValue[index].ToArray());
}
}
dbConnection.Close();
}
}
public void OpenSql()
{
try
{
dbConnection = new MySqlConnection("Data Source=localhost;Persist Security Info=yes;UserId=root; PWD=admin;");
dbConnection.Open();
}
catch (Exception e)
{
throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());
}
}
//判断表格是否存在
public bool IsTableExits(string tableName,string database)
{
query = string.Format("SELECT DISTINCT t.table_name, t.TABLE_SCHEMA FROM information_schema.TABLES t WHERE t.table_name = '{0}' AND t.TABLE_SCHEMA = '{1}';", tableName, database);
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//判断库是否存在
public bool IsDataBaseExits(string dataBaseName)
{
query = string.Format("SELECT information_schema.SCHEMATA.SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME = '{0}';", dataBaseName);
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//判断用户是否存在
public bool IsUserExist(string userName)
{
query = string.Format("SELECT user FROM mysql.user where user = 'admin';");
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//创建用户
public void CreatUser(string userName,string psw)
{
if (IsUserExist(userName))
{
return;
}
query = string.Format("GRANT all privileges ON mysql.user TO '{0}'@'%' IDENTIFIED BY '{1}';", userName, psw);
ExecuteQuery(query);
}
//创建数据库
public DataSet CreateDataBase(string dataBaseName)
{
query = "CREATE DATABASE IF NOT EXISTS " + dataBaseName + ";";
return ExecuteQuery(query);
}
//创建表格
public DataSet CreatTable(string tableName, string dataBase, string[] colName)
{
dbConnection.Close();
string connectionString = string.Format("Data Source=localhost;Database = {0};UserId=root; PWD=admin;", dataBase);
dbConnection = new MySqlConnection(connectionString);
dbConnection.Open();
bool isexist;
isexist = IsTableExits(tableName,dataBase);
Debug.Log(isexist);
if (isexist)
{
string dropTable = string.Format("DROP TABLE {0}", tableName);
ExecuteQuery(dropTable);
}
//if (colName.Length != colType.Length)
//{
// throw new Exception("columns.Length != colType.Length");
//}
string query = "CREATE TABLE " + tableName + " (" + colName[0] + " INT NOT NULL AUTO_INCREMENT";
for (int i = 1; i < colName.Length; ++i)
{
query += ", " + colName[i] + " varchar(255)" ;
}
query += ", PRIMARY KEY (" + colName[0] + ")" + ");";
return ExecuteQuery(query);
}
//插入一条数据,不包括ID,自动累加
public DataSet InsertInfo(string tableName, string[] colNames, string[] values)
{
string query = "INSERT INTO " + tableName + "(";
query += colNames[1];
for (int cnt = 2; cnt < colNames.Length; cnt++)
{
query += "," + colNames[cnt];
}
query += ")";
query += " VALUES (" + "'" + values[1] + "'";
for (int i = 2; i < values.Length; ++i)
{
query += ", " + "'" + values[i] + "'";
}
query += ")";
Debug.Log(query);
return ExecuteQuery(query);
}
public static DataSet ExecuteQuery(string sqlString)
{
if (dbConnection.State == ConnectionState.Open)
{
DataSet ds = new DataSet();
try
{
MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);
da.Fill(ds);
}
catch (Exception ee)
{
throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());
}
finally
{
}
return ds;
}
return null;
}
public DataSet ReadBatFile(string fileName)
{
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
Stream fStream2 = new FileStream(fileName, FileMode.Open, FileAccess.Read);
DataSet ds = (DataSet)binFormat.Deserialize(fStream2);//反序列化对象
return ds;
}
/// <summary>
/// 根据指定的 Assets下的文件路径 返回这个路径下的所有文件名//
/// </summary>
/// <returns>文件名数组</returns>
/// <param name="path">Assets下“一"级路径</param>
/// <param name="pattern">筛选文件后缀名的条件.</param>
/// <typeparam name="T">函数模板的类型名t</typeparam>
void GetObjectNameToArray<T>(string path, string pattern)
{
string objPath = Application.streamingAssetsPath + "/" + path;
string[] directoryEntries;
try
{
//返回指定的目录中文件和子目录的名称的数组或空数组
directoryEntries = System.IO.Directory.GetFileSystemEntries(objPath);
for (int i = 0; i < directoryEntries.Length; i++)
{
string p = directoryEntries[i];
//得到要求目录下的文件或者文件夹(一级的)//
string[] tempPaths = StringExtention.SplitWithString(p, "/StreamingAssets/" + path + "\\");
//tempPaths 分割后的不可能为空,只要directoryEntries不为空//
if (tempPaths[1].EndsWith(".meta"))
continue;
string[] pathSplit = StringExtention.SplitWithString(tempPaths[1], ".");
//文件
if (pathSplit.Length > 1)
{
nameArray.Add(pathSplit[0]);
}
//遍历子目录下 递归吧!
else
{
GetObjectNameToArray<T>(path + "/" + pathSplit[0], "pattern");
continue;
}
}
}
catch (System.IO.DirectoryNotFoundException)
{
Debug.Log("The path encapsulated in the " + objPath + "Directory object does not exist.");
}
}
public class StringExtention
{
public static string[] SplitWithString(string sourceString, string splitString)
{
string tempSourceString = sourceString;
List<string> arrayList = new List<string>();
string s = string.Empty;
while (sourceString.IndexOf(splitString) > -1) //分割
{
s = sourceString.Substring(0, sourceString.IndexOf(splitString));
sourceString = sourceString.Substring(sourceString.IndexOf(splitString) + splitString.Length);
arrayList.Add(s);
}
arrayList.Add(sourceString);
return arrayList.ToArray();
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Data;
using System.IO;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
public class WriteSQLcfg : MonoBehaviour {
static MySqlConnection dbConnection;
string query;
DataSet ds_sql;
DataTable dt_sql;
public static List<string> nameArray = new List<string>();
public string dataBaseName;
void Start () {
}
void Update () {
if (Input.GetKeyDown(KeyCode.W))
{
OpenSql();
CreatUser("admin", "admin");
CreateDataBase(dataBaseName);
GetObjectNameToArray<string>("cfg", ".xml");
//读取配置文件并导入数据库
for (int i = 0; i < nameArray.Count; i++)
{
string fileName = Application.streamingAssetsPath + "/cfg/" + nameArray[i] + ".xml";
ds_sql = ReadBatFile(fileName);
dt_sql = ds_sql.Tables[0];
List<string> list_columns = new List<string>();
List<string> list_rows = new List<string>();
foreach (DataColumn colum in dt_sql.Columns)
{
list_columns.Add(colum.ToString());
}
CreatTable(nameArray[i], dataBaseName, list_columns.ToArray());
Dictionary<int, List<string>> tempValue = new Dictionary<int, List<string>>();
int key = 0;
foreach (DataRow row in dt_sql.Rows)
{
tempValue[key] = new List<string>();
foreach (DataColumn column in dt_sql.Columns)
{
tempValue[key].Add(row[column].ToString());
}
key++;
}
//写入数据
for (int index = 0; index < tempValue.Count; index++)
{
InsertInfo(nameArray[i], list_columns.ToArray(), tempValue[index].ToArray());
}
}
dbConnection.Close();
}
}
public void OpenSql()
{
try
{
dbConnection = new MySqlConnection("Data Source=localhost;Persist Security Info=yes;UserId=root; PWD=admin;");
dbConnection.Open();
}
catch (Exception e)
{
throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());
}
}
//判断表格是否存在
public bool IsTableExits(string tableName,string database)
{
query = string.Format("SELECT DISTINCT t.table_name, t.TABLE_SCHEMA FROM information_schema.TABLES t WHERE t.table_name = '{0}' AND t.TABLE_SCHEMA = '{1}';", tableName, database);
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//判断库是否存在
public bool IsDataBaseExits(string dataBaseName)
{
query = string.Format("SELECT information_schema.SCHEMATA.SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME = '{0}';", dataBaseName);
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//判断用户是否存在
public bool IsUserExist(string userName)
{
query = string.Format("SELECT user FROM mysql.user where user = 'admin';");
DataSet result = ExecuteQuery(query);
return result.Tables[0].Rows.Count >= 1;
}
//创建用户
public void CreatUser(string userName,string psw)
{
if (IsUserExist(userName))
{
return;
}
query = string.Format("GRANT all privileges ON mysql.user TO '{0}'@'%' IDENTIFIED BY '{1}';", userName, psw);
ExecuteQuery(query);
}
//创建数据库
public DataSet CreateDataBase(string dataBaseName)
{
query = "CREATE DATABASE IF NOT EXISTS " + dataBaseName + ";";
return ExecuteQuery(query);
}
//创建表格
public DataSet CreatTable(string tableName, string dataBase, string[] colName)
{
dbConnection.Close();
string connectionString = string.Format("Data Source=localhost;Database = {0};UserId=root; PWD=admin;", dataBase);
dbConnection = new MySqlConnection(connectionString);
dbConnection.Open();
bool isexist;
isexist = IsTableExits(tableName,dataBase);
Debug.Log(isexist);
if (isexist)
{
string dropTable = string.Format("DROP TABLE {0}", tableName);
ExecuteQuery(dropTable);
}
//if (colName.Length != colType.Length)
//{
// throw new Exception("columns.Length != colType.Length");
//}
string query = "CREATE TABLE " + tableName + " (" + colName[0] + " INT NOT NULL AUTO_INCREMENT";
for (int i = 1; i < colName.Length; ++i)
{
query += ", " + colName[i] + " varchar(255)" ;
}
query += ", PRIMARY KEY (" + colName[0] + ")" + ");";
return ExecuteQuery(query);
}
//插入一条数据,不包括ID,自动累加
public DataSet InsertInfo(string tableName, string[] colNames, string[] values)
{
string query = "INSERT INTO " + tableName + "(";
query += colNames[1];
for (int cnt = 2; cnt < colNames.Length; cnt++)
{
query += "," + colNames[cnt];
}
query += ")";
query += " VALUES (" + "'" + values[1] + "'";
for (int i = 2; i < values.Length; ++i)
{
query += ", " + "'" + values[i] + "'";
}
query += ")";
Debug.Log(query);
return ExecuteQuery(query);
}
public static DataSet ExecuteQuery(string sqlString)
{
if (dbConnection.State == ConnectionState.Open)
{
DataSet ds = new DataSet();
try
{
MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);
da.Fill(ds);
}
catch (Exception ee)
{
throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());
}
finally
{
}
return ds;
}
return null;
}
public DataSet ReadBatFile(string fileName)
{
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
Stream fStream2 = new FileStream(fileName, FileMode.Open, FileAccess.Read);
DataSet ds = (DataSet)binFormat.Deserialize(fStream2);//反序列化对象
return ds;
}
/// <summary>
/// 根据指定的 Assets下的文件路径 返回这个路径下的所有文件名//
/// </summary>
/// <returns>文件名数组</returns>
/// <param name="path">Assets下“一"级路径</param>
/// <param name="pattern">筛选文件后缀名的条件.</param>
/// <typeparam name="T">函数模板的类型名t</typeparam>
void GetObjectNameToArray<T>(string path, string pattern)
{
string objPath = Application.streamingAssetsPath + "/" + path;
string[] directoryEntries;
try
{
//返回指定的目录中文件和子目录的名称的数组或空数组
directoryEntries = System.IO.Directory.GetFileSystemEntries(objPath);
for (int i = 0; i < directoryEntries.Length; i++)
{
string p = directoryEntries[i];
//得到要求目录下的文件或者文件夹(一级的)//
string[] tempPaths = StringExtention.SplitWithString(p, "/StreamingAssets/" + path + "\\");
//tempPaths 分割后的不可能为空,只要directoryEntries不为空//
if (tempPaths[1].EndsWith(".meta"))
continue;
string[] pathSplit = StringExtention.SplitWithString(tempPaths[1], ".");
//文件
if (pathSplit.Length > 1)
{
nameArray.Add(pathSplit[0]);
}
//遍历子目录下 递归吧!
else
{
GetObjectNameToArray<T>(path + "/" + pathSplit[0], "pattern");
continue;
}
}
}
catch (System.IO.DirectoryNotFoundException)
{
Debug.Log("The path encapsulated in the " + objPath + "Directory object does not exist.");
}
}
public class StringExtention
{
public static string[] SplitWithString(string sourceString, string splitString)
{
string tempSourceString = sourceString;
List<string> arrayList = new List<string>();
string s = string.Empty;
while (sourceString.IndexOf(splitString) > -1) //分割
{
s = sourceString.Substring(0, sourceString.IndexOf(splitString));
sourceString = sourceString.Substring(sourceString.IndexOf(splitString) + splitString.Length);
arrayList.Add(s);
}
arrayList.Add(sourceString);
return arrayList.ToArray();
}
}
}