前言
你要开发一个系统,是不是首要任务是先建库,建表,建字段,既所谓的数据建模(听起来高大上一点,数据建模也确实是个烧脑的活),要费不少功夫。
不知你是否遇到过这样的场景。A产品有3个测试参数,B产品有6个测试参数,而且值和类型都各不相同,用SQL你要怎么建表呢?
有人会说这简单“参数名,参数值两列搞定”,NO!数据类型考虑了吗,数据量考虑了吗?
有人又说"每个参数建一列,A,B两个产品共建9列用来存各自的值。",如果某天C产品又有9个参数呢,又去增加字段?,你又说”item1,item2...N,多增加几十个备用",有考虑过查询吗?有考虑过他人看到这样的表不头大吗?
还有人说“一列JSON列搞定”,数据查询和数据统计一样把人折磨的不要不要的。
NOSQL的出现,让你眼前一亮,上面的问题迎刃而解。建库,建表,甚至建字段都是很愉悦的事情,你传入什么数据,NOSQL就给你自动创建好,相应的数据库和表(准确的说NoSQL的表叫数据集)。
同一个列可以有不同数据库类型,某一列存单纯的一个数字,还是一个对象都可以随心所欲。
今天要介绍的就是嵌入式NOSQL数据库,LiteDB,就是一个NOSQL版的SQLite。
LiteDB是嵌入式,跨平台,纯c#开发的轻量数据库。详情,请移步到https://www.litedb.org了解。
笔者使用LiteDB,掐指一算,已有6个年头,虽然踩过不少坑,经历过数据库损坏的痛苦经历,但依然没有放弃它,还是爱不释手,因为它在某些应用场景确实非常贴近我的需求。目前经历过几次版本迭代,功能也越来越完善。
现在切入正题
让我一步一步带你增删改查。
安装
Install-Package DbCRUD.LiteDB 安装包
数据库连接及初始化
//数据库连接
//LiteDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db");//相对路径([程序目录]\DATA)
IDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db");//相对路径([程序目录]\DATA)
//LiteDbCRUD testdb = new LiteDbCRUD(@"filename=C:\CRUDTestDB.db");//绝对路径指定数据库保存路径
插入数据
//**同步插入对象数据
var customer = new CustomerViwe
{
//Id = id + 50, ////实体类,ID不赋值,默认根据数据类型自动整数编号,支持int,long,objectid
Name = "周彰文",
Phones = new string[] { "80000", "90000" },
IsActive = true,
};
var result = testdb.Insert(tb_custormer, customer);
//**同步插入字典数据
var dic1 = new Dictionary<string, object>
{
//{ "_id", 1 },//***如果不指定ID,插入时会自动编一个objectid的唯一ID
{ "Name", "LitedbCRUD" },
{ "Qty", 19},
{ "DDate", DateTime.Now }
};
var result11 = testdb.Insert(autoIDData, dic1);
//插入JSON数据
string jsondata = JsonConvert.SerializeObject(dic1);
var result12 =testdb.Insert(tb_jsondata, jsondata);
//**sql命令插入
var result13 = testdb.Insert($"insert {sqldata}('name','date') value ('test','2023-05-07')");
//**批量插入列表
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
int maxid = testdb.Max<int>(dictable);
for (int i = 0; i < 10; i++)
{
maxid++;
var dic2 = new Dictionary<string, object>
{
{ "_id",maxid },
{ "Name", "n2" },
{ "Qty", 19+maxid},
{ "DDate", DateTime.Now }
};
listdata.Add(dic2);
}
var listResult= testdb.Insert(dictable, listdata);
更新数据
var updata = new Dictionary<string, object>
{
{ "Name", "更新指定字段数据" },
{ "Qty", 300}
};
var upresult = testdb.UpDate(dictable, updata, "_id=2"); //更新_id=2的数据
更新及插入数据(数据存在更新,不存在插入)
//** 更新或插入数据
var dic1 = new Dictionary<string, object>
{
{ "_id", 2 },
{ "Name", "插入或更新单条数据" },
{ "Qty", 200},
{ "DDate", DateTime.Now }
};
var result= testdb.Upsert(dictable, dic1);
Assert.IsTrue(result.Stutas);
//** 批量插入或更新
var dic3 = new Dictionary<string, object>
{
{ "_id", 3 },
{ "Name", "批量插入或更新" },
{ "Qty", 300},
{ "DDATE", DateTime.Now }
};
List<Dictionary<string,object>> listdata=new List<Dictionary<string, object>> { dic3,dic1};
var listresult = testdb.Upsert(dictable, listdata);
查询数据
//查找id=2的数据
var databyid = testdb.FindByID<Dictionary<string, object>>(dictable,2);
//查找Qty>10的数据
var wheredata = testdb.Find<Dictionary<string, object>>(dictable, "Qty>10");
//sql语句查找的数据
string sqlcmd = $"select * from {dictable}";
var sqldata = testdb.Find<Dictionary<string, object>>(sqlcmd);
//分页查找的数据
var pagedata = testdb.GetPagingData<Dictionary<string, object>>(dictable, "Qty>10",pageindex:1,pagenumber:10);
删除数据
//**删除_id=2的数据
var result = testdb.Delete(dictable,2);
//**删除qty<30的数据
var wherresult = testdb.Delete(dictable, "Qty<30");
//**使用sql语句删除_id=30的数据
string sql = $"delete {dictable} where _id=30";
var sqlresult = testdb.Delete(sql);
更多使用方法请移步到仓库 https://gitee.com/lzcode/db-crud
我的分享希望能给你带去帮助,您的打赏是我继续为您分享的动力。
原文链接:https://www.cnblogs.com/zzwen/p/17351036.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通用的CRUD之LiteDB - Python技术站