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");