Loading... ## 系列导航 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://traceless.tech/index.php/archives/20/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://traceless.tech/usr/themes/handsome/assets/img/sj/6.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">【手摸手系列】教你开发QQ机器人 - 目录导航</p> <div class="inster-summary text-muted"> 教程背景<p style="color:red">由于发生了众所周知的机器人平台事... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 本文系列源码:[点我进入][1] ### 本期目标 结合实际场景 - 使用sqlite-net ### 1.整合Sqlite-net <div class="tip inlineBlock info"> 由于SDK中Native.Tool中提供的sqlite工具类,太!难!用!了! 此处将自带Sqlite工具类删除了,通过nuget引用Sqlite-Net [使用文档点我进入][2] 他人翻译和整合的[中文版文档][3] </div> 首先新建类库**Site.Traceless.Demo.DB**存放数据库模型类和SQlite工具类 在Demo.Code中添加对**Site.Traceless.Demo.DB**的引用! 工具-Nuget包管理器-管理解决方案的Nuget程序包 搜索**sqlite-net** 我们直接集成到Demo.DB中 确定后,会自动添加SQLite.cs【同步类】和SQLiteAsync.cs【异步类】文件,不管它! 删掉建库自带的Class1.cs或者将其改名为SQLiteHelper.cs <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-84436dc5bcd9844b86c629b0cf863f4f35" aria-expanded="true"><div class="accordion-toggle"><span style="">SQLiteHelper.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-84436dc5bcd9844b86c629b0cf863f4f35" class="collapse collapse-content"><p></p> ```c# using SQLite; using System.Collections.Generic; namespace Site.Traceless.Demo.DB { public class SQLiteHelper { public SQLiteConnection db; public SQLiteHelper(string connstr) { db = new SQLiteConnection(connstr); //这里等会要加东西 } public int Add<T>(T model) { return db.Insert(model); } public int Update<T>(T model) { return db.Update(model); } public int Delete<T>(T model) { return db.Delete(model); } public List<T> Query<T>(string sql) where T : new() { return db.Query<T>(sql); } public int Execute(string sql) { return db.Execute(sql); } } } ``` <p></p></div></div></div> 引用Native.SDK类【这一步可选,如果你不需要在Sql过程中调用一些酷Q API的话】 增加一个Common.cs存储一些公共类 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-3cfa6824adc8e236e3db7951eb7907e436" aria-expanded="true"><div class="accordion-toggle"><span style="">Common.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-3cfa6824adc8e236e3db7951eb7907e436" class="collapse collapse-content"><p></p> ```c# using Native.Sdk.Cqp; namespace Site.Traceless.Demo.DB { public static class Common { public static CQApi CqApi { get; set; }//可选,如果你不需要在Sql过程中调用一些酷Q API的话 public static CQLog CqLog { get; set; }//可选,如果你不需要在Sql过程中调用一些酷Q API的话 public static string DbPath { get; set; } public static SQLiteHelper sqliteHelper { get; set; } } } ``` <p></p></div></div></div> ### 2.使用Sqlite-net 首先**Site.Traceless.Demo.DB**下新建文件夹**Model**存放我们的数据库模型 用一个简单的示例来演示Sqlite的使用 <div class="tip inlineBlock share"> 应用场景: 一张用户表,记录了对应的用户ID和用户信息(包括 昵称、性别) 可以通过ID查询用户信息。 【其他的使用在Helper中已经集成了基本的增删改了,也可以直接执行sql语句】 </div> 抽象表为一个Class类,我们这边可以用"T_"来标记用于数据库表的抽象模型 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-b9cd2a1a942d2dca0220518d609f201928" aria-expanded="true"><div class="accordion-toggle"><span style="">T_User.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-b9cd2a1a942d2dca0220518d609f201928" class="collapse collapse-content"><p></p> ```c# using SQLite; namespace Site.Traceless.Demo.DB.Model { public class T_User { /// <summary> /// 自增主键,用作用户ID /// </summary> [PrimaryKey, AutoIncrement]//分别表示主键,自增 public int Id { get; set; } /// <summary> /// 昵称 /// </summary> public string Nick { get; set; } = "我是默认昵称"; /// <summary> /// 性别 0未知 1男 2女 /// </summary> public int Gender { get; set; } = 0; } } ``` <p></p></div></div></div> ```c# using SQLite; using System.Collections.Generic; using Site.Traceless.Demo.DB.Model; namespace Site.Traceless.Demo.DB { public class SQLiteHelper { public SQLiteConnection db; public SQLiteHelper(string connstr) { db = new SQLiteConnection(connstr); db.CreateTable<T_User>();//表已存在不会重复创建,每次新增一个表的抽象类都在这里添加db.CreateTable<T_XXXX>(),才会在程序启动的时候自动创建表。 } //下面的内容相同,省略 } ``` 在"Event_AppEnable.cs"修改如下 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-7cb9948bfec366473f0afbb42d10d5d696" aria-expanded="true"><div class="accordion-toggle"><span style="">新的Event_AppEnable.cs</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-7cb9948bfec366473f0afbb42d10d5d696" class="collapse collapse-content"><p></p> ```c# using System.Linq; using System.Text; using Native.Sdk.Cqp.Interface; using Native.Sdk.Cqp.EventArgs; using System.IO; using Native.Tool.IniConfig.Linq; using Site.Traceless.Demo.DB; namespace Site.Traceless.Demo.Code.Event { public class Event_AppEnable : IAppEnable { public void AppEnable(object sender, CQAppEnableEventArgs e) { Common.CqApi = e.CQApi; DB.Common.CqApi = e.CQApi; DB.Common.CqLog = e.CQLog; DB.Common.DbPath = e.CQApi.AppDirectory + "yourname.db";//".db前面的文字可以修改为你想要的数据库文件名称,建议使用英文" DB.Common.sqliteHelper = new SQLiteHelper(DB.Common.DbPath); string commandPath = Common.CqApi.AppDirectory + "command.ini"; IniObject iObject; //下面的内容相同,省略 } } } ``` <p></p></div></div></div> 最后在任意想使用的地方使用 DB.Common.sqliteHelper.Add(某个T_User)//增加新数据 DB.Common.sqliteHelper.Update(某个T_User)//更新某个数据(根据主键) DB.Common.sqliteHelper.Delete(某个T_User)//删除某个数据(根据主键) [1]: https://github.com/traceless0929/Native.Cqp.Csharp/tree/demo [2]: https://github.com/praeclarum/sqlite-net/wiki/GettingStarted [3]: https://blog.csdn.net/WuLex/article/details/78636047 [4]: https://gitee.com/DotNetTraceless/mydatadb/raw/master/img/20200327161822.png Last modification:July © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏