简介:
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