已在github上建立项目:https://github.com/ThinkerCodeChina/jsonDB

博客:http://blog.csdn.net/thinkercode/

简介:

jsonDB是js的一个类库,是基于json数据格式构建的数据模型实现对json数据增删改查。jsonDB的构建源自于HTML5本地存储的一个应用需求,可以通过sql对json数据进行增删改查,同时该类库提供强大的where检索条件,数据排序,limit查询条件限制等数据库基本功能。通过jsonDB可以轻松维护一个库/表或多个库/表,而无需额外实现json的数据的维护等,在该类库完善以后为简化sql操作,基于jsonDB核心模块扩展了连贯操作模型,简化对jsonDB的操作以及sql语句出错的概率。

一、jsonDB核心模块功能

1.        jsonDB([[data],dbName])

概述:

创建jsonDB数据库模型实例

参数:

data (可选)

json库/表数据

dbName(可选)

数据库/表名称,默认为json_db

返回值:jsonDB

2.        init([alias])

概述:

初始化jsonDB数据库模型,可以通过alias对jsonDB()方法设置一个别名,便于数据操作。

参数:

alias(可选)

通过alias对jsonDB()方法设置一个别名

返回值:jsonDB

3.        query(sql)

概述:

执行一个sql语句,该方法支持select、delete、update操作,其中select支持选择指定字段、from、where、order by、limit字句,delete支持from、where、limit字句,update支持from、set、where、limit字句,该方法实现了数据库基本的sql语句操作。query()方法并不支持insert语句,因为采用json数据格式的原因,顾采用insert方法单独实现一个高效可行的insert操作方法。

参数:

sql(必选)

要执行的sql语句,必须是select、delete、update中的一种。

返回值:

select语句返回查询结果,delete和update语句会返回执行影响操作的条数

4.        insert(data[,dbName])

概述:

向数据表末端插入一条数据或者向数据库中插入一个数据表

参数:

data (必选)

要插入的数据

dbName(可选)

数据库或数据表的名称,默认为json_db

返回值:jsonDB

5.        findAll([dbName])

概述:

快速获取指定数据库/表中的全部数据,主要用来对数据处理完成后,需要保存数据时使用,例如删除指定数据后调用该方法获取全部删除后的数据并存储在本地存储中,当然不同的应用可能实现不同的功能。

参数:

dbName(可选)

数据库或数据表名称。默认为json_db

返回值:指定数据库或数据表的数据

一、jsonDB基础应用示例

//创建一张user数据表,并定义一个DB的jsonDB别名
var data = [{username:'张三',sex:'男',birthday:{year:2000,month:6,day:18}},{username:'李红',sex:'女',birthday:{year:1986,month:9,day:22}}];
//以下方法可以通过两种方式获取别名,一个是通过init方法获取(推荐),一个是获取jsonDB()方法的返回值
//以后示例中都将使用init()方法创建的别名操作数据
var jDB = jsonDB(data,'user').init('DB');//插入一条新的数据
data = {username:'李想',sex:'男',birthday:{year:1990,month:2,day:15}};
DB.insert(data,'user');//查询姓名为李红的性别,where条件必须加()否者会出现错误
var result =DB.query('select sex from user where (username="李红")');
//结果:[{"sex":"女"}]//查询2000年之前出生的且按出生年先后排序
var result =DB.query('select * from user where (birthday.year<2000) order by birthday.year asc');
//结果:[{"username":"李红","sex":"女","birthday":{"year":1986,"month":9,"day":22}},{"username":"李想","sex":"男","birthday":{"year":1990,"month":2,"day":15}}]
//查询年龄最小的两个人
var result =DB.query('select * from user order by birthday.year desc limit 2');
//查询结果:[{"username":"张三","sex":"男","birthday":{"year":2000,"month":6,"day":18}},{"username":"李想","sex":"男","birthday":{"year":1990,"month":2,"day":15}}]//修改李红的出生日期
var result =DB.query('update user set birthday.year=1991 where (username="李红") limit 1');
//影响条数为一条,可以通过DB.findAll('user')获取全部数据查看是否被修改成功//删除姓名为李想的数据
var result =DB.query('delete from user where (username="李想") limit 1');
//影响条数为一条,可以通过DB.findAll('user')获取全部数据查看是否被删除成功//数据库中所有数据
//[{"username":"张三","sex":"男","birthday":{"year":2000,"month":6,"day":18}},{"username":"李红","sex":"女","birthday":{"year":1991,"month":9,"day":22}}]

三、jsonDB扩展

简介:

基于jsonDB核心模块为简化sql语句编写、数据操作等方面考虑而编写的数据库连贯操作模型,在扩展模型上实现jsonDB更为强大的操作方式和功能。

1.        table(table)

概述:

定义之后jsonDB查询默认表名称

参数:

table (必选)

定义之后jsonDB要操作的默认表名称,不影响sql语句的默认表名称,只会影响之后所有连贯操作。

返回值:jsonDB

2.        field(fileds)

概述:

定义查询返回的字段

参数:

fields(必选)

可以接受数组或以,号隔开的字符串

返回值:jsonDB

3.        where(where)

概述:

定义查询条件,支持所有if可以接受的条件,双等号可以写成单等号,比sql语句更加简洁的是不用在where条件两端写一对括号。

参数:

where(必选)

查询条件

返回值:jsonDB

4.        order(order)

概述:

定义排序方式,目前只支持单字段排序

参数:

order(必选)

定义排序方式

返回值:jsonDB

5.        limit(limit)

概述:

限制查询条数或范围

参数:

limit(必选)

限制查询条数或范围,单独一个数字限制查询条数,以逗号分割两个数字代表查询范围。

返回值:jsonDB

6.        add(data)

概述:

可以结合table()方法向指定数据表中插入数据,如果之前没有设定table()方法将默认插入到json_db数据表中。

参数:

data(必选)

要插入到数据表或数据库中的数据。

返回值:jsonDB

7.        select()

概述:

可以配合定义的field()、table()、where()、order()、limit()方法现实复杂查询

参数:无

返回值:result

8.        update(data)

概述:

可以配合table()、where()、limit()方法对指定数据进行修改

参数:

data(必选)

update语句的set字句字符串

返回值:

操作影响条数

9.        delete()

概述:

可以配合table()、where、limit()方法对指定数据进行删除操作

参数:无

返回值:

操作影响的条数。

10.    drop()

概述:

删除指定数据库或表

参数:无

返回值:jsonDB

四、jsonDB的高级应用

//向数据表插入一条数据
DB.table('user').add({username:'王帅',sex:'男',birthday:{year:1995,month:10,day:23}});//查询所有人出生日期,并按出生年排序,由于之前使用table('user')定义为user表,所以可以省略,table方法定义是一直有效的,除非是重新设定了
var result = DB.field('username,birthday').order('birthday.year').select();
//查询结果  [{"username":"李红","birthday":{"year":1991,"month":9,"day":22}},{"username":"王帅","birthday":{"year":1995,"month":10,"day":23}},{"username":"张三","birthday":{"year":2000,"month":6,"day":18}}]//先插入一些数据,方便后面的检索操作
DB.table('user').add({username:'李亨',sex:'男',birthday:{year:2008,month:8,day:8}})
.add({username:'张琦',sex:'男',birthday:{year:1990,month:10,day:23}})
.add({username:'李媛芳',sex:'女',birthday:{year:1985,month:2,day:28}})
.add({username:'李果果',sex:'女',birthday:{year:2002,month:3,day:15}})
.add({username:'张源',sex:'男',birthday:{year:2005,month:12,day:5}})
.add({username:'王丽娜',sex:'女',birthday:{year:1992,month:5,day:12}});//高级查询之模糊搜索
//查询所有李姓成员(正则查找法)
var result = DB.field(["username"]).where('username.match(/^李/)').select();
//查询结果[{"username":"李红"},{"username":"李亨"},{"username":"李媛芳"},{"username":"李果果"}]//查询所有李姓成员(字符串搜索法)
var result = DB.field(["username"]).where('username.indexOf("李")=0').select();
//查询结果[{"username":"李红"},{"username":"李亨"},{"username":"李媛芳"},{"username":"李果果"}]//查询所有在1990年到1995年出生的人
var result = DB.field(["username","birthday"]).where('birthday.year>=1990 and birthday.year<=1995').order('birthday.year').select();
//查询结果:[{"username":"张琦","birthday":{"year":1990,"month":10,"day":23}},{"username":"李红","birthday":{"year":1991,"month":9,"day":22}},{"username":"王丽娜","birthday":{"year":1992,"month":5,"day":12}},{"username":"王帅","birthday":{"year":1995,"month":10,"day":23}}]

源码及示例下载:jsonDB.rar



jsonDB使用手册相关推荐

  1. 分布式训练使用手册-paddle 数据并行

    分布式训练使用手册¶ 分布式训练基本思想¶ 分布式深度学习训练通常分为两种并行化方法:数据并行,模型并行,参考下图: 在模型并行方式下,模型的层和参数将被分布在多个节点上,模型在一个mini-batc ...

  2. 正则语法完全正则表达式手册_语法格式重点

    20211202 https://blog.csdn.net/lc11535/article/details/103266263 该表达式打开re.U(re.UNICODE)标志. python –& ...

  3. CUDA C++编程手册(总论)

    CUDA C++编程手册(总论) CUDA C++ Programming Guide The programming guide to the CUDA model and interface. C ...

  4. html iso标准文档,HTML ISO-8859-1 参考手册

    # HTML ISO-8859-1 参考手册 HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集. ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 ...

  5. 最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面

    最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面. 原则 1.一致性  如果你可以在一个列表的项目上双击后能 够弹出对话框,那么应该在任何列表中双击都能弹出对话框.要有统一的字体写号.统 ...

  6. ffmpeg linux安装_ffmpeg命令中文手册

    功能 视频转换和编辑工具 示例 1.从mp4视频文件中提取音频并保存为mp3音频格式 [root@node_116 video]# ffmpeg -i video.mp4 -vn sound.mp3f ...

  7. java修炼手册3.8_Java修炼手册

    <Java修炼手册免费版>是一款专为想要自学JAVA的用户打造的全方位掌上学习软件,拥有各阶段的科学课程模块,从视频,资料,图片,演示等多种方面全面引导用户科学而快速的融入JAVA的世界中 ...

  8. android 设置setmultichoiceitems设置初始化勾选_阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?...

    集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生. 关于HashMap,很多人都对他有一些基本的了解,比如他和hashtab ...

  9. 【radar】毫米波雷达相关资料(文献综述列表、顶会研讨会资料列表、顶会workshops资料列表、工具书、使用手册)(2)

    [radar]毫米波雷达相关资料(毫米波雷达文献综述列表.毫米波雷达顶会研讨会资料列表.毫米波雷达顶会workshops资料列表.毫米波雷达工具书.毫米波雷达使用手册)(2) Review Paper ...

  10. java string 占位符_驳《阿里「Java开发手册」中的1个bug》?

    前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...

最新文章

  1. actived生命周期_vue生命周期钩子函数actived没有执行
  2. java中同步_在Java中的方法同步和语句同步(块同步) - Break易站
  3. 网规:第4章 网络安全-4.5IDS和IPS
  4. JSON和JavaScript对象互转
  5. 用navixt连接mysql连接不上_技嘉的RX 5500 XT、1650/1660 SUPER显卡现身欧亚经委会数据库:实锤两家中端新卡...
  6. 实验四恶意代码分析技术 201421430029
  7. centos6.6安全设置
  8. java单例模式深入详解_javascript 模块依赖管理的本质深入详解
  9. sqlserve生成随机数
  10. 给wordpress添加留言者操作系统、浏览器和运营商信息
  11. 动态规划实战3-leetcode 55.Jump Game
  12. 子网掩码计算java,JAVA获取子网掩码源代码
  13. 三因子两水平doe_温故而知新 | DOE实验设计学习系列之(三):多因子DOE的魅力 (附视频)...
  14. Arduino颜色分类器
  15. 利用selenium获取接口数据
  16. 混合非线性整数规划matlab,非线性整数规划matlab
  17. 同济大学计算机专业辅修声乐,同济大学关于本科生修读辅修专业的管理办法
  18. TL-R406 IP带宽控制功能设置指南
  19. H5页面调用微信支付
  20. android 推送历史 coolapk,酷安(com.coolapk.market) - 11.2.2 - 应用 - 酷安

热门文章

  1. 年度读书总结:宏观经济学系列
  2. Android-DRM详解
  3. PS时间轴制作动态图
  4. 三星为Ativ S发布WP8更新
  5. 面向对象------转自林海峰老师
  6. 《东周列国志》第十四回 卫侯朔抗王入国 齐襄公出猎遇鬼
  7. 浏览器看视频,加速脚本
  8. RHEL5下nginx+php+mysql+tomcat+memchached配置全过程
  9. 编程题a ~ y的25个字母,从1位到4位的编码,输出这个编码对应的Index
  10. python读取图片分辨率_Python 程序查找图像的大小(分辨率)