当前位置: 首页 > news >正文

cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)-阿里云开发者社区...

CYQ.Data V5版本的文本数据库,以前有过相关的介绍:周末一起用文本数据库玩玩Code First

数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍: CYQ.Data V5文本数据库技术原理解密

前几天实现基本功能后,也写了一篇突发想支持SQL语句的冲突想法的来源: CYQ.Data 文本数据库解析SQL语法

对于文本数据库的原理:简单的说,就4步:

1:存储用json或xml。

2:读取时还原为MDataTable。

3:操作时操作MDataTable实现数据行的变化。

4:保存时重新写为json或xml。

PS:当然还有一个CodeFirst模式时自动产生用于记录表结构的"表名.ts"文件。

文本数据库的Where语句分拆:

69c5a8ac3fa60e0848d784a6dd461da6.png

原先的功能,有Select(where),这个where是支持sql语句的,简单说就是对where进行了以下分析:

string where="id>1 and name like '%a%' order by id desc";

分析出where,order by ,再分析出id,name及对应的值,循环进行值判断,提取出合适的行。

从而达到查询的功能。

69c5a8ac3fa60e0848d784a6dd461da6.png

现在要支持SQL,看似复杂点又提升了点,因为简单的SQL语句大体如下:

69c5a8ac3fa60e0848d784a6dd461da6.png

Insert into ErrorLogs(PageUrl , ErrorMessage) values('http://...','what''is the ...')

Select count(*) from ErrorLogs...

Select * from ErrorLogs where ...

Select id,name from ErrorLogs ...

Update ErrorLogs set id=1 and name='name is Mr''Right'

Delete From ErrorLogs where ...

69c5a8ac3fa60e0848d784a6dd461da6.png

对于这些字符串的处理,真是很考基本功:

69c5a8ac3fa60e0848d784a6dd461da6.png

比如:Insert into ErrorLogs(PageUrl , ErrorMessage) values('http://...','what''is (the (name))...')

把这条语句,分拆出:

1:操作:Insert

2: 表名:ErrorLogs

3:PageUrl :"http://..."

4: ErrorMessage :"'what'' is (the (name))..."

69c5a8ac3fa60e0848d784a6dd461da6.png

PS:我觉的可以适当的拿来做面试题了。。。。

大体整体的实现,基本上就等同于解析上面的SQL语法,然后回归到MDataTable的原始操作上去,细节就不啰嗦重复了。

下面看一下实现后的效果图:

项目截图就省略了,页面后台的代码:

69c5a8ac3fa60e0848d784a6dd461da6.png

protected void btnExec_Click(object sender, EventArgs e)

{

if (!string.IsNullOrEmpty(txtSql.Text))

{

MProc proc = new MProc(txtSql.Text, txtConn.Text);

switch (ddlExeType.SelectedValue)

{

case "0":

labTip.Text = proc.ExeScalar();

break;

case "1":

labTip.Text = proc.ExeNonQuery().ToString();

break;

case "2":

MDataTable dt = proc.ExeMDataTable();

rptList.DataSource = dt;

rptList.DataBind();

break;

}

proc.Close();

}

}

69c5a8ac3fa60e0848d784a6dd461da6.png

上面这段代码很简单,执行指定链接的SQL语句,然后显示相应的信息。

操作数据库,基本配置文件里指定日志的链接字符串是必不可少的内容:

说明:把系统错误日志用文件数据库记录,CYQ.Data V5内置用了CodeFirst方式来实现异常的数据库执行日志错误:

表名为ErrorLogs

4个字段分别为:

1:ID,PageUrl,ErrorMessage,CreateTime。

下面我们看界面:由于我的项目里本身就有日志,我们查询一下:

8f829a796f93198c9947842756dd1657.png

OK,下面我们删除所有数据库,执行成功后删除了5行数据:

27c3c68b2401e50288964eeac8e9b0d4.png

再添加一行数据:

e89541ee79d440611de2073ee45094a1.png

最后更新这行1行数据:

7219dadb5b324f11850a273519e6d642.png

最终再查询显示一次:

6142a9aafc77fab3ef6030783c0887a7.png

至此,整个基本的SQL语法解析和实现就告终了,至于什么GroupBy,多表,视图,函数之类的,就在文本数据库的能力之外了。

功能的实现自己用两个Table去For还是while去实现自己需要的逻辑。

下面再补充一下ErrogLogs这个日志说明:

69c5a8ac3fa60e0848d784a6dd461da6.png

默认的CodeFirst,简单说就是你指定哪种数据库类型,就会自动创建相应的表结构,然后把执行SQL的错误信息写到该日志里,方便查询分析和解决。

以前,我习惯把日志的链接写成:

其实就是指向Conn(CYQ.Data默认的主数据库配置顶),这样就把日志表放到和主数据库表同一个数据库。。

结果有时候,如果主数据库挂掉,异常日志就无法记录了,所以建议是存到其它数据库。

但有了文件数据库之后,用文本来存储日志,看似是个不错的选择,而且操作也相当方便。

69c5a8ac3fa60e0848d784a6dd461da6.png

CodeFirst时,如果有数据(第一条数据产生时,自动根据实体产生了表结构,如果是文本,在指定的目录下出来这个)

a82bce382d12c1befcc24968961077e6.png

当然了,除了比较标准的,是自动生成的,如果你是自己手工创建,可以新建一个表名.ts表结构,内容:

ID,int;

PageUrl,string;

ErrorMessage,string;

CreateTime,datetime;

CYQ.Data V5里文本数据库,实用价值:

包括网站站点的广告节点显示,友情链接,一些需要经常或偶尔编辑的Key,Value值等项,存文本数据库是最方便不过了。

有效的把非主站的附加数据,存储到文本数据库,利用文本数据完全内存表机制,高效,节能,又方便。

CYQ.Data V5在文本数据库、Access、SQLite、XHtmlAction等功能,都是不需要授权可以直接使用的。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2013/05/02/3055049.html

相关文章:

  • mysql组复制脑裂_MySQL 组复制介绍
  • 前端websocket更新列表数据_详解前端websocket服务器之数据传输协议
  • stopwords怎么用_用Python画词云图,展示“新冠肺炎”关键词
  • pygame简单小游戏代码_用pygame实现一个简单的垃圾分类小游戏(已获校级二等奖)!...
  • mysql数据迁移到redis_Mysql到Redis的数据迁移方法
  • linux mysql 客户端 安装配置_linux下mysql的安装部署
  • mysql虚拟表的创建_mysql虚拟表
  • win 10 查看mysql密码_win10系统登录mysql时报错1045?查看解决方案
  • 安装好mysql怎么配置_安装好mysql怎么配置
  • pythonwx关闭窗口_如何在WX python中关闭已打开的窗口
  • mysql负载突然飙升_mysql负载飙高原因分析
  • CA系统mysql_MySQL性能优化
  • linux下安装mysql5.5_Linux下安装mysql5.5.19
  • mysql ignore oracle_Oracle impdp的ignore及 fromuser / touser 功能
  • mysql监控命令_MySQL数据库维护中监控所用到的常用命令
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CAP理论的例子讲解
  • CSS 三角实现
  • git 常用命令
  • js正则,这点儿就够用了
  • Map集合、散列表、红黑树介绍
  • spring security oauth2 password授权模式
  • VuePress 静态网站生成
  • 安卓应用性能调试和优化经验分享
  • 闭包,sync使用细节
  • 如何利用MongoDB打造TOP榜小程序
  • 我与Jetbrains的这些年
  • 在Unity中实现一个简单的消息管理器
  • nb
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (4)STL算法之比较
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)Flask之app.route装饰器函数的参数
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (南京观海微电子)——COF介绍
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 的程序集加载上下文
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • /run/containerd/containerd.sock connect: connection refused
  • @Bean, @Component, @Configuration简析
  • []常用AT命令解释()
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C语言]一维数组二维数组的大小
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [HNOI2006]鬼谷子的钱袋
  • [html] 动态炫彩渐变背景
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页
  • [JS]变量