美文网首页ionic开发Web 前端开发
在 cordova 项目中使用 sqlite

在 cordova 项目中使用 sqlite

作者: 户口米青 | 来源:发表于2019-04-05 18:40 被阅读80次

    websql-orm 框架,支持 typescript angular cordova chrome 的sqlite数据库读写。

    开始

    websql-orm 使用 TypeScript 语言编写,使用之前需在 tsconfig.json 添加装饰器配置项以启用装饰器特性.

    {
        "compilerOptions": {
            "experimentalDecorators": true
        }
    }
    

    安装

    npm install websql-orm@latest

    提示:不要安装2.1.0之前的版本,2.1.0之前的版本是调试阶段的版本,无法使用

    cordova plugin add cordova-sqlite-storage

    若是cordova项目,则需要安装cordova插件兼容iOS

    定义表

    如何使用实体类定义一个表?

    import { table, column, ColumnType, Table } from 'websql-orm';
    
    @table("student_db")
    export class student extends Table {
        @column(ColumnType.STRING | ColumnType.PRIMARY)
        id: string;
        @column(ColumnType.STRING)
        user_name: string;
    }
    
    1. 装饰器@table 定义student表,类名 student 是表名, student_db 是数据库名。
    2. 装饰器 @column 定义列,ColumnType.STRING 表示该字段是文本类型
    3. 每个表必须拥有一个主键字段,ColumnType.PRIMARY 表示该字段为主键字段
    4. 每个实体类必须继承 Table

    装饰器说明

    装饰器名 描述 示例
    @table 定义表 @table("student_db")
    @column 定义列 @column(ColumnType.STRING)

    字段类型枚举

    表字段枚举值与TypeScript基本类型保持一致

    字段类型枚举 描述
    ColumnType.PRIMARY 主键
    ColumnType.BOOLEAN 布尔值
    ColumnType.NUMBER 数值
    ColumnType.STRING 字符串
    ColumnType.ARRAY 数组
    ColumnType.DATE 日期
    ColumnType.ANY 任意类型

    如何使用

    以上述定义的 student 表为例

    websql-orm 方法列表

    sqlite.fromSql 查询表记录,返回记录列表

    var list = await sqlite.fromSql(new student(),
                'select * from student where user_name=? and id=? ',
                ['Tom','guid']);
    

    sqlite.fromSqlFirst 查询首条表记录,返回首条记录

    var info = await sqlite.fromSqlFirst(new student(),
                'select * from student where user_name=? ',
                ['Tom']);
    

    sqlite.exist 查询记录是否存在,返回true或false

    var result = await sqlite.exist('b4ce6b51-0bd6-46ee-a5c7-d1d5a93bdee9');
    

    sqlite.insert 插入记录,返回受影响的行数

    var stu = new student();
    stu.id = uid;
    stu.user_name = 'Tom'; 
    var result = await sqlite.insert(stu);
    

    sqlite.update 修改记录,返回受影响的行数

    var info = await sqlite.fromSqlFirst(new student(),
                'select * from student where user_name=? ',
                ['Tom']);
    info.user_name = 'Sam'; 
    var result = await info.save(); //或者 var result = await sqlite.update(info)
    

    sqlite.query 查询记录,返回记录列表

    var list = await sqlite.query({ user_name:'Tom'});
    

    sqlite.queryFirst 查询首条记录

    var info = await sqlite.queryFirst({ user_name:'Tom'});
    

    sqlite.execSql 执行sql语句,返回受影响行数

    var result = await sqlite.execSql(new student(),
                    'insert into (id,user_name) values (?,?)',
                    ['b4ce6b51-0bd6-46ee-a5c7-d1d5a93bdee9','Tom']);
    

    示例

    import { sqlite } from 'websql-orm';
    import { student } from './entity/student';
    
    export class Demo {
        constructor() {
            var that = this;
            setTimeout(async () => {
                var uid = that.uuid();
                //实体实例
                var data = new student();
                data.id = uid;
                data.user_name = "Tom";
                //插入记录
                var insertResult = await sqlite.insert(data);
                if (insertResult) {
                    //使用sql语句查询刚刚插入的记录
                    var result = await sqlite.fromSqlFirst(new student(), "select * from student where id=?", [uid]);
                    console.log("使用sql语句查询刚刚插入的记录:")
                    console.log(result);
                    //修改user_name
                    result.user_name = "Sam";
                    //直接调用save()方法保存
                    var saveResult = await result.save();
                    if (saveResult) {
                        //使用简易方法查询刚刚保存的记录
                        var info = await sqlite.queryFirst(new student(), { id: uid });
                        console.log("使用简易方法查询刚刚保存的记录:")
                        console.log(info);
                    }
                }
    
                //演示一次性插入多条记录
                var students = new Array<student>();
                
                var stu1 = new student();
                stu1.id = that.uuid();
                stu1.user_name = "David";
    
                var stu2 = new student();
                stu2.id = that.uuid();
                stu2.user_name = "David";
    
                students.push(...[stu1, stu2]);
    
                //插入多条记录
                var insertsResult = await sqlite.insert(students);
    
                if (insertsResult) {
                    //查询返回多条记录
                    var stus = await sqlite.query(new student(), { user_name: "David" });
                    console.log("使用简易方法查询查询返回多条记录:");
                    console.log(stus);
                }
                
            }, 0);
        }
    
        /**
         * 生成伪guid
         */
        public uuid(): string {
            let s: any[] = [];
            let hexDigits = "0123456789abcdef";
            for (let i = 0; i < 36; i++) {
                s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
            }
            s[14] = "4";  
            s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  
            s[8] = s[13] = s[18] = s[23] = "-";
            let uuid = s.join("");
            return uuid;
        }
    }
    
    

    相关文章

      网友评论

        本文标题:在 cordova 项目中使用 sqlite

        本文链接:https://www.haomeiwen.com/subject/jijkiqtx.html