using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Collections;
using UnityEngine;
/// <summary>
/// 与sqlite 的用法是一致的
/// </summary>
public class MySQLManager
{
//数据库
private static MySqlConnection mCon;
private static MySqlCommand mCommand;
private static MySqlDataReader mReader;
//数据库地址
private static string mysqlPath;
//连接数据库 封存储存地址 需要输入数据库名称参数 打开数据库
/// <summary>
/// 打开数据库
/// </summary>
/// <param name="dataBaseName"> 被打开的数据库的名字 </param>
public static void OpenConnectMySql(string dataBaseName)
{
//获取数据库的名称
string conDataBaseName = dataBaseName;
//连接数据库
mysqlPath = "Database=" + dataBaseName + ";" + "Data Source=127.0.0.1;User Id=root;Password=1234;pooling=false;CharSet=utf8;port=3306";
mCon = new MySqlConnection(mysqlPath);
//试图打开数据库
try
{
mCon.Open();
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
/// <summary>
/// 关闭数据库
/// </summary>
public static void CloseConnectMySql()
{
try
{
if (mCon != null)
{
mCon.Close();
}
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
/// <summary>
/// 执行语句 只用于增删改
/// </summary>
private static void Execute(string query)
{
//赋值
query += ";";//末尾可以不加分号
mCommand = new MySqlCommand(query, mCon);
mCommand.ExecuteNonQuery();
}
public static void CreateDataBase(string dataBaseName)
{
string query = "Create DataBase " + dataBaseName + ";";
Execute(query);
}
/// <summary>
/// 创建数据表
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="cols"> 列名</param>
/// <param name="colType"> 列的类型</param>
public static void CreateTable(string tableName, string[] cols, string[] colType)
{
if (cols.Length != colType.Length)
{
throw new System.Exception("cols.Length != colType.Length");
}
//create table 'LOL'('Name' text, 'Num' float)
string query = "Create Table " + tableName + " (" + cols[0] + " " + colType[0];
for (int i = 1; i < cols.Length; i++)
{
query += ", " + cols[i] + " " + colType[i];
}
query += ")";
Execute(query);
}
/// <summary>
/// 增加一行数据
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="values"> 数值组</param>
public static void InsertIntoMySql(string tableName, string[] values)
{
//string qu = "Insert Into QQ Values('','','')";
//string query2 = "Insert Into QQ Values('" + inputName.text + "','" + inputPaw.text + "')";
//query 是一个字符串 所以只要把sql 语句拼接起来就行
string query = "Insert Into " + tableName + " Values ('" + values[0] + "'";
for (int i = 1; i < values.Length; ++i)
{
query += ",'" + values[i] + "'";
}
query += ")";
Execute(query);
}
/// <summary>
/// 第二种插入方式 选择性插入某一行的某些列
/// </summary>
/// <param name="tableName"></param>
/// <param name="cols"></param>
/// <param name="colsValues"></param>
public static void InsertIntoMySqlSpecific(string tableName, string[] cols, string[] colsValues)
{
if (cols.Length != colsValues.Length)
{
throw new System.Exception("cols.Length != colsValues.Length");
}
// string query2= insert into Student (Name, num) values('xiao', '98')
string query = "Insert Into " + tableName + " ( " + cols[0] + "";
for (int i = 1; i < cols.Length; i++)
{
query += "," + cols[i];
}
query += ") Values('";
query += colsValues[0] + "'";
for (int i = 1; i < colsValues.Length; i++)
{
query += ",'" + colsValues[i] + "'";
}
query += ")";
Execute(query);
}
/// <summary>
/// 更改某一行某一列的值的数据
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="cols"> 要修改的列数组 </param>
/// <param name="colsValues"> 修改的那一列为新值 </param>
/// <param name="selectKey"> 修改哪一行 </param>
/// <param name="selectValues"> 修改那一行的键的数值 </param>
public static void UpdateMySql(string tableName, string cols, string colsValues, string selectKey, string selectValues)
{
//string query2 = " update Student set Name = 'xiaoming' where Num = '90'";
string query = " Update " + tableName + " set " + cols + " = '" + colsValues + "' ";
query += " where " + selectKey + " = '" + selectValues + "' ";
Execute(query);
}
/// <summary>
/// 更改某一行某几列的数据(可以更改多列)
/// 如果只想改某一列数据 数组只需附一个值就行
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="cols"> 要修改的列数组 </param>
/// <param name="colsValues"> 修改的那一列为新值 </param>
/// <param name="selectKey"> 修改哪一行 </param>
/// <param name="selectValues"> 修改那一行的键的数值 </param>
public static void UpdateMySql(string tableName, string[] cols, string[] colsValues, string selectKey, string selectValues)
{
//string query2 = " update Student set Name = 'xiaoming' where Num = '90'";
//update Student set Name = 'xiaoming', Age = '60' where Num = '90'
string query = " Update " + tableName + " set " + cols[0] + " = '" + colsValues[0] + "' ";
for (int i = 1; i < colsValues.Length; i++)
{
query += ",";
//不加“++” 因为这里加的是clos[1]表示的字符串 而上面是赋值 给query时 加“+ +”
query += cols[i];
query += "='" + colsValues[i] + "'";
}
query += " where " + selectKey + " = '" + selectValues + "' ";
Execute(query);
}
/// <summary>
/// 删除 只给一个条件的
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="cols"> 列名数组</param>
/// <param name="colsValues"> 要删除那一行 的对应的列的值 </param>
public static void Delete(string tableName, string cols, string colsValues)
{
string query = "Delete from " + tableName + " where " + cols + " = '" + colsValues + "'";
Execute(query);
}
/// <summary>
/// 删除某一行多个条件
/// 如果只想给一个条件 数组只需赋值一个就行
/// </summary>
/// <param name="tableName"> 表名</param>
/// <param name="cols"> 列名数组</param>
/// <param name="colsValues"> 要删除那一行 的对应的列的值 </param>
public static void Delete(string tableName, string[] cols, string[] colsValues)
{
//delete from Student where Name='xiaoming' or Age= '15'
string query = "Delete from " + tableName + " where " + cols[0] + " = '" + colsValues[0] + "'";
for (int i = 1; i < colsValues.Length; i++)
{
//或者另外一列表示那一行
query += "or";
query += cols[i];
query += "='" + colsValues[i] + "'";
}
Execute(query);
}
/// <summary>
/// 删除某一个整表
/// </summary>
/// <param name="tableName"> 表名</param>
public static void DeleteAll(string tableName)
{
string query = "Delete From" + tableName + "";
Execute(query);
}
/// <summary>
/// 查询不加条件的
/// 执行查询语句 返回一个ArrayList 类型的链表
/// ArrayList相当于每一行的数据 然后一行一行的加到list中
/// </summary>
/// <param name="tableName"></param>
/// <param name="cols"> 列数组可写一个 </param>
public static List<ArrayList> Select(string tableName, string[] cols)
{
// string query = "Select Name,Num From " + tableName + " ";
string query = "Select " + cols[0] + "";
for (int i = 1; i < cols.Length; i++)
{
query += "," + cols[i];
}
query += " From " + tableName + "";
List<ArrayList> list = ReaderExecute(query);
return list;
}
/// <summary>
/// 查询整个表
/// 执行查询语句 返回一个ArrayList 类型的链表
/// ArrayList相当于每一行的数据 然后一行一行的加到list中
/// </summary>
/// <param name="tableName"></param>
public static List<ArrayList> Select(string tableName)
{
// string query = "Select * From" + tableName + "";
string query = "Select*From " + tableName + "";
List<ArrayList> list = ReaderExecute(query);
return list;
}
/// <summary>
/// 查询整个表格里 带一个条件的
/// 执行查询语句 返回一个ArrayList 类型的链表
/// ArrayList相当于每一行的数据 然后一行一行的加到list中
/// </summary>
/// <param name="tableName"></param>
/// <param name="keyCols"> 条件列</param>
/// <param name="keyValues"> 列值</param>
public static List<ArrayList> SelectSingleWhere(string tableName, string keyCols, string keyValues)
{
// string query = "Select*From " + tableName + " where Name = 'dhl'";
string query = "Select*From " + tableName + " where " + keyCols + " = '" + keyValues + "'";
List<ArrayList> list = ReaderExecute(query);
return list;
}
/// <summary>
/// 查询待条件的 如果只查询出一列 数组只需赋值一个
/// 执行查询语句 返回一个ArrayList 类型的链表
/// ArrayList相当于每一行的数据 然后一行一行的加到list中
/// </summary>
/// <param name="tableName"></param>
/// <param name="cols"> 查询的列名数组 </param>
/// <param name="keyCols"></param>
/// <param name="keyValues"></param>
public static List<ArrayList> SelectWhere(string tableName, string[] cols, string keyCols, string keyValues)
{
//string querya = "Select Name From Student Where Number=666";
//select Name ,Num from Student where Age='20'
string query = "Select " + cols[0] + "";
for (int i = 1; i < cols.Length; i++)
{
query += ",";
query += cols[i];
}
query += " From " + tableName + " where ";
query += keyCols + "='";
query += keyValues;
query += "'";
List<ArrayList> list = ReaderExecute(query);
return list;
}
/// <summary>
/// 执行查询语句 返回一个ArrayList 类型的链表
/// ArrayList相当于每一行的数据 然后一行一行的加到list中
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public static List<ArrayList> ReaderExecute(string query)
{
Execute(query);
MySqlDataReader reader = mCommand.ExecuteReader();
List<ArrayList> list = new List<ArrayList>();
while (reader.Read())
{
//返回结果的列数
int count = reader.FieldCount;
ArrayList temp = new ArrayList();
//遍历所有的列
for (int i = 0; i < count; i++)
{
temp.Add(reader.GetValue(i));
}
list.Add(temp);
}
//读完之后关闭
reader.Close();
return list;
}
/// <summary>
/// 数据库降序
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="keyCols">关键列</param>
/// <returns></returns>
public static List<ArrayList> Desc(string tableName, string keyCols)
{
string query = "Select*From " + tableName + " ORDER BY " + keyCols + " DESC";
List<ArrayList> list = ReaderExecute(query);
return list;
}
/// <summary>
/// 数据库升序
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="keyCols">关键列</param>
/// <returns></returns>
public static List<ArrayList> Asc(string tableName, string keyCols)
{
string query = "Select*From " + tableName + " ORDER BY " + keyCols + " ASC";
List<ArrayList> list = ReaderExecute(query);
return list;
}
}
在unity环境下封装的mysql库
最新推荐文章于 2023-04-25 15:37:22 发布