using DownKyi.Core.Logging; using System; using System.Collections.Generic; namespace DownKyi.Core.Storage.Database { public class CoverDb { private const string key = "b5018ecc-09d1-4da2-aa49-4625e41e623e"; private readonly string tableName = "cover"; #if DEBUG private readonly DbHelper dbHelper = new DbHelper(StorageManager.GetCoverIndex().Replace(".db", "_debug.db")); #else private readonly DbHelper dbHelper = new DbHelper(StorageManager.GetCoverIndex(), key); #endif public CoverDb() { CreateTable(); } /// /// 关闭数据库连接 /// public void Close() { dbHelper.Close(); } /// /// 插入新的数据 /// /// public void Insert(Cover cover) { try { string sql = $"insert into {tableName} values ({cover.Avid}, '{cover.Bvid}', {cover.Cid}, '{cover.Url}', '{cover.Md5}')"; dbHelper.ExecuteNonQuery(sql); } catch (Exception e) { Utils.Debugging.Console.PrintLine("Insert()发生异常: {0}", e); LogManager.Error("CoverDb", e); } } /// /// 更新数据,以url检索 /// /// public void Update(Cover cover) { try { string sql = $"update {tableName} set avid={cover.Avid}, bvid='{cover.Bvid}', cid={cover.Cid}, md5='{cover.Md5}' where url glob '{cover.Url}'"; dbHelper.ExecuteNonQuery(sql); } catch (Exception e) { Utils.Debugging.Console.PrintLine("Update()发生异常: {0}", e); LogManager.Error("CoverDb", e); } } /// /// 查询所有数据 /// /// public List QueryAll() { string sql = $"select * from {tableName}"; return Query(sql); } /// /// 查询url对应的数据 /// /// /// public Cover QueryByUrl(string url) { string sql = $"select * from {tableName} where url glob '{url}'"; List query = Query(sql); return query.Count > 0 ? query[0] : null; } /// /// 查询md5对应的数据 /// /// /// public Cover QueryByMd5(string md5) { string sql = $"select * from {tableName} where md5 glob '{md5}'"; List query = Query(sql); return query.Count > 0 ? query[0] : null; } /// /// 查询数据 /// /// /// private List Query(string sql) { List covers = new List(); try { dbHelper.ExecuteQuery(sql, reader => { while (reader.Read()) { Cover cover = new Cover { Avid = (long)reader["avid"], Bvid = (string)reader["bvid"], Cid = (long)reader["cid"], Url = (string)reader["url"], Md5 = (string)reader["md5"] }; covers.Add(cover); } }); } catch (Exception e) { Utils.Debugging.Console.PrintLine("Query()发生异常: {0}", e); LogManager.Error($"{tableName}", e); } return covers; } /// /// 如果表不存在则创建表 /// private void CreateTable() { string sql = $"create table if not exists {tableName} (avid unsigned big int, bvid varchar(20), cid unsigned big int, url varchar(255) unique, md5 varchar(32) unique)"; dbHelper.ExecuteNonQuery(sql); } } }