using UnityEngine; using System.Collections; using Mono.Data.Sqlite; using System.Data; public enum DataBaseMessage //用来存放数据库的异常信息 { Normal = 1, //正常 AddDataExist, //添加的数据已经存在 PrimaryKeyNoExist, //主键不存在 } //用来对数据库的操作 public class DataBaseManager //对数据库的操作,封装成单例模式 { public static DataBaseManager GetInstanic { get { if (Instatinc == null) Instatinc = new DataBaseManager(); return Instatinc; } } private DataBaseManager() //构造函数 { SQLConn = new SqliteConnection(SQL_Path); //创建数据连接 SQLComm = SQLConn.CreateCommand(); //创建对应的数据库指令 } public void Open_DB() //打开数据库 { if (SQLConn.State == ConnectionState.Closed) //判断当前数据库连接的状态是否在关闭状态 { SQLConn.Open(); //如果当前的数据库连接状态为关闭状态,就开启当前状态 } } public void Close_DB() //关闭数据库 { SQLConn.Close(); //关闭数据库的时候,不需要判断当前的数据库状态,直接关闭即可 } public DataBaseMessage Add_Data(string Table, string ColumnName, string data) //往数据库里面添加数据 { string comm = "Insert Into " + Table + "( "+ ColumnName +" ) Values ( '" + data +"')"; SQLComm.CommandText = comm; //执行的数据库指令 try { SQLComm.ExecuteNonQuery(); //执行SQL指令 } catch(System.Exception e) //用来抛出异常信息 { string str = "column " + ColumnName +" is not unique"; //数据库异常信息: 该列的值不能重复,但是尝试插入重复的值 if (str == ExceptionMessage(e.Message, "\n")) { return DataBaseMessage.AddDataExist; //如果已经存在了,就返回存在的信息 } } return DataBaseMessage.Normal; } public DataBaseMessage Add_Data(string Table, string ColumnName, string PrimaryKey, string PrimaryKeyValue, string data) { //添加到不是主键的里面 //Update PlayCount set Pass = 25 Where User = '1' string comm = "Update "+ Table +" set " +ColumnName+" = '" + data +"' Where " + PrimaryKey+ "= '"+ PrimaryKeyValue +"'"; SQLComm.CommandText = comm; //执行的数据库指令 if(SQLComm.ExecuteNonQuery() == 0) //执行SQL指令 { return DataBaseMessage.PrimaryKeyNoExist; //如果执行指令的影响行数是零,说明没有此行,既没有对应的PrimaryKeyValue } return DataBaseMessage.Normal; } public bool Select_Data(string Table, string ColumnName, string PrimaryKey, string PrimaryKeyValue, string data) { //判断某一特定的行,对应的某一列上面的值是否存在 string comm = "Select " +ColumnName +" From " + Table +" Where " + PrimaryKey +" = '" + PrimaryKeyValue +"'"; //只有一行 SQLComm.Cancel(); //先取消命令,在不取消命令的情况下,不能重新设置命令 SQLComm.CommandText = comm; Read = SQLComm.ExecuteReader(); //执行命令 if(Read.GetValue(0).ToString() == data) //判断是否相等,如果相等就返回真 { Read.Close(); return true; } Read.Close(); return false; //不存在 } public bool Select_Data(string Table, string ColumnName, string data) //判断某一行是否存在该数据 { string comm = "Select " + ColumnName +" From " + Table; //查询某一列的值 SQLComm.Cancel(); SQLComm.CommandText = comm; Read = SQLComm.ExecuteReader(); while (Read.Read()) { if (Read.GetValue(0).ToString() == data) { Read.Close(); return true; //如果存在就返回真 } } Read.Close(); return false; } public string Get_Data(string Table, string ColumnName, string PrimaryKey, string PrimaryKeyValue) { //取出数据库里面某一个表,某一列,某一行的值 string comm = "Select " + ColumnName + " From " + Table + " Where " + PrimaryKey + " = '" + PrimaryKeyValue + "'"; //只有一行 SQLComm.Cancel(); //先取消命令,在不取消命令的情况下,不能重新设置命令 SQLComm.CommandText = comm; Read = SQLComm.ExecuteReader(); //执行命令 string data = Read.GetValue(0).ToString(); Read.Close(); return data; } private string ExceptionMessage(string ExcMessage, params string[] s) //分割异常信息 { string[] str = ExcMessage.Split(s, System.StringSplitOptions.RemoveEmptyEntries); return str[str.Length - 1].ToString(); } private static DataBaseManager Instatinc; private SqliteConnection SQLConn; //创建数据库连接对象 private SqliteCommand SQLComm; //创建数据库指令对象 private SqliteDataReader Read; //创建数据库连接读取对象 private string SQL_Path = "Data Source = " +Application.dataPath + "/_MyProject/Plugins/Demo_Defense_DB"; //数据库路径 }