/******************************************************************** 文件: SqliteManager.cs 作者: 梦语 邮箱: 1982614048@qq.com 创建时间: 2024/03/29 17:28:19 最后修改: 梦语 最后修改时间: 2024/04/03 16:04:51 功能: sqlite本地数据库管理类(用于存放一些本地数据) 使用案例: SqliteManager.Inst.CreateTable("role", new List() { new DataBaseColumnTypeData(){ columnName = "角色id", columnType = DataBaseColumnType.Int, isAutoInchement = true, isPrimaryKey = true}, new DataBaseColumnTypeData(){ columnName = "角色名称", columnType = DataBaseColumnType.VarChar, parameter = new List() { 10 }, isNotNull = true}, new DataBaseColumnTypeData(){ columnName = "等级", columnType = DataBaseColumnType.Int, isNotNull = true}, }); DataBaseManager.Inst.DelectTable("role"); DataBaseManager.Inst.Update("role", new List<(string, string)>() { ("角色名称", "11"), }, new List() { //new DataBaseFitter() //{ // columnName = "角色名称", // fitterType = DataBaseFitterType.Equal, // fitterValue = "32", //}, new DataBaseFitter() { columnName = "等级", fitterType = DataBaseFitterType.GreaterlEqual, fitterValue = "20", }, }); SqliteManager.Inst.Select("role", new List() { new DataBaseFitter() { columnName = "角色名称", fitterType = DataBaseFitterType.Equal, fitterValue = "11" } }); *********************************************************************/ using Mono.Data.Sqlite; using System; using System.Collections.Generic; using System.IO; using UnityEngine; namespace Ether { public class SqliteManager : Singleton { private readonly static string dataBaseDirectory = $"{Application.persistentDataPath}/DB"; //数据库文件夹沙盒路径 private const string dataBaseName = "ether.db"; //数据库名称 private readonly static string databasePath = $"{dataBaseDirectory}/{dataBaseName}"; // 数据库文件沙盒路径 private readonly static string streamingAssetsDatabasePath = $"{Application.streamingAssetsPath}/DB/{dataBaseName}"; // streamingAssets数据库文件名称 static SqliteConnection connection;//创建一个数据库链接事件对象 private SqliteCommand command; private SqliteDataReader reader; /// /// 数据库链接 /// public void Connect() { // 定义数据库连接字符串 string connectionString = $"URI = file:{databasePath};Version=3;"; //Android:"URI = file:" + Application.dataPath + "test.db"; // 创建数据库连接 //传入创建或者访问SQLITE数据库的路径 connection = new SqliteConnection(connectionString); //判断沙盒是否有数据库文件,如果没有则将streamingAssets中的数据库文件拷贝过去 if (File.Exists(databasePath)) { connection?.Open();//打开数据库 command = connection.CreateCommand(); Debug.Log("Sqlite数据库链接完毕已打开"); } else { if (File.Exists(streamingAssetsDatabasePath)) { if (!Directory.Exists(dataBaseDirectory)) { Directory.CreateDirectory(dataBaseDirectory); } try { File.Copy(streamingAssetsDatabasePath, databasePath); Debug.Log("Sqlite数据库文件复制成功!"); connection?.Open();//打开数据库 command = connection.CreateCommand(); Debug.Log("Sqlite数据库链接完毕已打开"); } catch (Exception ex) { Debug.Log("Sqlite数据库文件复制失败:" + ex.Message); } } else { Debug.LogError("streamingAssets中Sqlite数据库文件不存在!"); } } } /// /// 断开数据库链接 /// public void DisConnect() { command?.Dispose(); command = null; connection?.Close(); Debug.Log("Sqlite数据库链接已关闭"); } /// /// 创建表 /// /// /// public void CreateTable(string tableName, List tableColumnDataList) { string columnSqlStr = ""; for (int i = 0; i < tableColumnDataList.Count; i++) { if (i == 0) { columnSqlStr += DataBaseColumnTypeData.FormatColumnType(tableColumnDataList[i]); } else { columnSqlStr += "," + DataBaseColumnTypeData.FormatColumnType(tableColumnDataList[i]); } } string commandStr = $"CREATE TABLE IF NOT EXISTS {tableName}({columnSqlStr}); "; Debug.Log("Sqlite创建表Sql:" + commandStr); command.CommandText = commandStr; command.ExecuteNonQuery(); } /// /// 删除表 /// /// public void DropTable(string tableName) { string commandStr = $"DROP TABLE IF EXISTS {tableName}; "; Debug.Log("Sqlite删除表Sql:" + commandStr); command.CommandText = commandStr; command.ExecuteNonQuery(); } #region 增 /// /// 增加数据 /// /// 表名 /// 插入数据 public void Insert(string tableName, List<(string, string)> insertDataList) { if (insertDataList.Count <= 0) { Debug.LogError("Sqlite插入表数据为空,请检查数据!"); return; } string columnNameList = ""; string columnValeList = ""; for (int i = 0; i < insertDataList.Count; i++) { if (i == 0) { columnNameList += insertDataList[i].Item1; columnValeList += insertDataList[i].Item2; } else { columnNameList += "," + insertDataList[i].Item1; columnValeList += "," + insertDataList[i].Item2; } } string commandStr = $"INSERT INTO {tableName} ({columnNameList}) VALUES ({columnValeList});"; Debug.Log("Sqlite插入表Sql:" + commandStr); command.CommandText = commandStr; command.ExecuteNonQuery(); } #endregion #region 删 /// /// 删除数据 /// /// 表名 /// 条件 public void Delete(string tableName, List fitterList) { if (fitterList.Count <= 0) { Debug.LogError("Sqlite删除表数据为空,请检查数据!"); return; } string condition = ""; for (int i = 0; i < fitterList.Count; i++) { if (i == 0) { condition += $"{fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } else { condition += $" AND {fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } } string commandStr = $"DELETE FROM {tableName} WHERE {condition};"; Debug.Log("Sqlite删除表记录Sql:" + commandStr); command.CommandText = commandStr; command.ExecuteNonQuery(); } #endregion #region 改 public void Update(string tableName, List<(string, string)> setValues, List fitterList) { if (setValues.Count <= 0) { Debug.LogError("Sqlite修改表数据为空,请检查数据!"); return; } string setStr = ""; for (int i = 0; i < setValues.Count; i++) { if (i == 0) { setStr += $"{setValues[i].Item1} = '{setValues[i].Item2}'"; } else { setStr += $",{setValues[i].Item1} = '{setValues[i].Item2}'"; } } string condition = ""; for (int i = 0; i < fitterList.Count; i++) { if (i == 0) { condition += $"{fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } else { condition += $" AND {fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } } string commandStr = $"UPDATE {tableName} SET {setStr} WHERE {condition};"; Debug.Log("Sqlite修改表记录Sql:" + commandStr); command.CommandText = commandStr; command.ExecuteNonQuery(); } #endregion #region 查 public SqliteDataReader Select(string tableName, List fitterList = null, int limitNum = 0) { string condition = ""; if (fitterList != null) { for (int i = 0; i < fitterList.Count; i++) { if (i == 0) { condition += $"WHERE {fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } else { condition += $" AND {fitterList[i].columnName} {DataBaseFitter.FormatFitter(fitterList[i].fitterType)} {fitterList[i].fitterValue}"; } } } string limit = limitNum > 0 ? $"LIMIT {limitNum}" : ""; string commandStr = $"SELECT * FROM {tableName} {condition} {limit};"; Debug.Log("Sqlite查询表记录Sql:" + commandStr); command.CommandText = commandStr; SqliteDataReader read = command.ExecuteReader(); return read; } #endregion } }