Database API

CUTOS数据库基本表结构为Key-Value格式,Value可以是任意json对象。这样设计的好处是Value修改字段数据库不需要升级,缺点是不能像传统数据库一样灵活访问。 如果需要更灵活的数据库访问功能,可以使用CUTOS提供的SQL全兼容接口。

CUTOS基本表结构(默认主键名称为id,数据类型为 INTEGER):

字段 数据类型 说明
id INTEGER 主键
value TEXT 数据
tid TEXT 外键,transaction id
sync INTEGER 同步标志: 0-未同步,1-同步
timestamp INTEGER 最近一次修改时戳

安装

npm install @cutos/core

引入依赖

import {CoreAPI, CoreClass} from '@cutos/core';

Database

构造函数

import {CoreAPI, CoreClass} from '@cutos/core';
let database = new CoreClass.Database(db);
  • db: 数据库名称,不传名称默认lwa.db

Database.connect

连接数据库

database.connect(callback)
  • callback: 回调函数
举例:
let database = database.connect((result, error) => {
  if (!error) {
    console.log(result)
  }
})
  • 返回结果示例:
 {
  "dbPath": "/home/linaro/.config/dios/data/lwa.db"
}

Database.run

运行sql

 database.run(sql, callback)
  • sql: 执行sql语句
  • callback: 回调函数
举例:
database.run('select * from device', (result, error) => {
  if (!error) {
    console.log(result)
  }
})
  • 返回结果示例:
[
  {
    "id": 1,
    "value": "{\"type\":\"printer\",\"name\":\"HP-1\"}",
    "tid": "tra-001",
    "sync": 0,
    "timestamp": 1691401911678
  },
  {
    "id": 2,
    "value": "{\"type\":\"printer\",\"name\":\"HP-2\"}",
    "tid": "tra-002",
    "sync": 0,
    "timestamp": 1691401911681
  }
]

Database.Table

构造函数

let table = new Database.Table(name, db);
  • name: 表名
  • db: 数据库实例
举例:
let table = new Database.Table('device', database);

Table.create

创建数据库表

table.create([opts], callback)
  • opts: 可选参数,包含3个属性:
    • retentionTime: 保留时间,单位小时;不传默认永久保留
    • keyName: 名称,不传默认为'id'
    • keyType: 类型,含有2种类型'TEXT'和'INTEGER',不传默认为'INTEGER'
  • callback: 回调函数
举例:
table.create((result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
[]

Table.insert

插入数据

table.insert(value, [opts], callback);
  • value: 插入数据
  • opts: 可选参数
    • tid: 外键id,用于在多条记录间建立关系
  • callback: 回调函数
举例:
let tid = "tra-001";
table.insert({type: "printer", name: "NEC"}, {tid: tid}, (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
{
  "status": true,
  "row": 1
}

table.insertById

通过id插入数据

table.insertById(id, value, [opts], callback)
  • id: 数据id
  • value: 插入数据
  • opts: 可选参数
    • tid: 外键id,用于在多条记录间建立关系
  • callback: 回调函数
举例:
let tid = "tra-001";
table.insertById(1, {type: "printer", name: "NEC"}, {tid: tid}, (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
{
  "status": true,
  "row": 1
}

Table.update

更新数据

table.update(id, value, callback);
  • id: 数据id
  • value: 更新数据
  • callback: 回调函数
举例:
table.update(row, {type: "printer", name: "HP-2"}, (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
{
  "status": true,
  "msg": 0
}

table.delete

删除数据

table.delete(id, callback)
  • id: 数据id
  • callback: 回调函数

Table.query

查询数据

table.query(id, callback);
  • id: 数据id
  • callback: 回调函数
举例:
deviceTable.query(row, (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
[
  {
    "id": 2,
    "value": "{\"type\":\"printer\",\"name\":\"HP-2\"}",
    "tid": "tra-001",
    "sync": 0,
    "timestamp": 1691401911681
  }
]

Table.sync

同步数据

table.sync(id, callback);
  • id: 数据id
  • callback: 回调函数
举例:
deviceTable.sync(row, (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
{
  "status": true,
  "msg": 0
}

Table.queryUnsynced

查询未同步数据

table.queryUnsynced([opts], callback);
  • opts: 可选参数
  • callback: 回调函数
举例:
deviceTable.queryUnsynced((result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
[
  {
    "id": 1,
    "value": "{\"type\":\"printer\",\"name\":\"NEC\"}",
    "tid": "tra-001",
    "sync": 0,
    "timestamp": 1691402230172
  }
]

Table.queryByTid

通过外键查询数据

table.queryByTid(tid, callback);
  • tid: 外键id
  • callback: 回调函数
举例:
deviceTable.queryByTid("tra-001", (result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
[
  {
    "id": 2,
    "value": "{\"type\":\"printer\",\"name\":\"HP-2\"}",
    "tid": "tra-001",
    "sync": 0,
    "timestamp": 1691401911681
  }
]

Table.queryAll

查询所有数据

table.queryAll(callback);
  • callback: 回调函数
举例:
deviceTable.queryAll((result, error) => {
  if (!error) {
    console.log(result)
  }
});
  • 返回结果示例:
[
  {
    "id": 1,
    "value": "{\"type\":\"printer\",\"name\":\"HP-1\"}",
    "tid": "tra-001",
    "sync": 0,
    "timestamp": 1691401911678
  },
  {
    "id": 2,
    "value": "{\"type\":\"printer\",\"name\":\"HP-2\"}",
    "tid": "tra-002",
    "sync": 0,
    "timestamp": 1691401911681
  }
]

results matching ""

    No results matching ""