en Kooboo Logo 说明文档

Database

 

DB命名空间包含了数据库的基本操作, 目前内置了7种数据库的支持, SqlServer, MySql与Mongo需要在系统配置里配置连接字符串。不同数据库的使用非常相似, 我们尽量提供统一的操作规范。
 
示例的操作如下:
 
k.DB.indexedDb.tablename.all(); 
k.DB.mongo.tablename.all(); 
k.DB.mysql.tablename.all(); 
k.DB.sqlServer.tablename.all(); 
k.DB.sqlite.tablename.all(); 
k.DB.sequenceDb.openDb("path", "filename").range(0,1000);
k.DB.keyValue.get("key"); 
 
IndexedDb:  Kooboo自主实现的索引型数据库, 特点是速度快, 缺点是没有完整实现ACID的概念
Mogo:  MongoDB非关系型数据库
MySql:   MySql 数据库
SqlServer:  MS Sql Server 数据库
Sqlite:  Sqlite 内嵌型数据库
SequenceDb:  Kooboo 自研的超高速存储, 只会顺序插入并返回一个INT的ID值
KeyValue: Kooboo主研的KeyValue存储
 
 
数据库插入
 
所有的数据库都支持动态插入, 也就是不用先建表或是字段, 如果字段不存在, 会自动创建, 也可以手工创建表。 后台管理界面提供了简单的数据库管理操作。
 
插入用户表的示例代码如下:
 
var user ={};
user.FirstName = "Joe"; 
user.LastName = "Smith";
k.DB.sqlite.User.add(user); 
 
数据库查询
 
系统内置了几种查询方式, 主要通过, get, find, findAll 与query四个API方法来查询
 
JSON 查询
 
可以使用的语法包含: EQ, AND, GT, GTE, LT, LTE, OR, CONTAINS
 
可以嵌套与组合条件, AND是默认的, 也可以指定OR, 示例如下:
 
var MatchLastName = k.DB.sqlite.User.find({LastName:"Smith"}); 

var MatchOR = k.DB.sqlite.User.find({LastName:"smith",FirstName:"one"}); 
 
const { EQ, AND, GT, GTE, LT, LTE, OR, CONTAINS } = k.DB.indexedDb.operators();   
var MatchNested = k.DB.sqlite.User.find({[OR]:{LastName:{[EQ]:"Smith"}, FirstName:{[EQ]:"Joe"}}});

k.response.write(MatchLastName);
 
Non-SQL查询
 
提供与早期 Non-SQL查询方式类型的语法结构,示例如下:
 
// available operators: ==, >=, >, <, <=, contains, startwith

var table = k.DB.indexedDb.tablename;

var items = table.find("name == 'matchedvalue'");

var items = table.find("number>=123");

var items = table.find("number >=123&&name=='matchedvalue'");

var items = table.find("name contains 'matchedvalue'");

var items = table.find("name startwith 'matchedvalue'");
 
 
SQL语法
 
如果是SQL数据库, 则会支持直接SQL查询或是执行SQL语句
 
k.DB.sqlite.query("SELECT * FROM Customer"); 

k.DB.sqlite.execute("DELETE FROM Customer"); 
 
匹配查询
 
find 与 findAll 方法都有提供,字段全匹配的查询
 
var item = k.DB.indexedDb.tablename.find("fieldname", "matchvalue");