前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uniapp sqlite数据库使用

uniapp sqlite数据库使用

作者头像
风花一世月
发布2024-03-19 13:24:06
1140
发布2024-03-19 13:24:06
举报
文章被收录于专栏:前端前端
代码语言:javascript
复制
let sqlite = {
  //创建数据库或者有该数据库就打开
  openSqlite: function () {
    //创建数据库或者打开
    //这plus.sqlite只在手机上运行
    return new Promise((resolve, reject) => {
      console.log("打开数据库");
      plus.sqlite.openDatabase({
        name: "xj", //数据库名称
        path: "_doc/xj.db", //数据库地址,uniapp推荐以下划线为开头,这到底存在哪里去了,我也不清楚,哈哈
        success(e) {
          resolve(e); //成功回调
        },
        fail(e) {
          reject(e); //失败回调
        },
      });
    });
  },
  // ---------------------------------------------------创建表----------------------------------------------------------------

  //在该数据库里创建表格, 这一步也必须要!
  //下面注释里说的都是说sql:'create table if not exists....这里
  //userInfo是表格名,你也可以写其他的名,不能用数字作为表格名的开头!!!
  //括号里是表格的结构,列,这里我写了四列,list,id,gender,avatar这四列
  //list后面大写的英文是自动增加的意思,因为表格里的每一行必须有唯一标识
  //这sql语句会数据库的应该都看的懂,我是前端菜鸡,所以详细说明以便跟我一样不懂sql的前端看
  //"id" TEXT 意思是这一列放的值为字符串之类的,如果是想存数字之类的就改为INTEGER
  //数据库不能存对象,数组
  //创建 9、定位表(d_location)
  dLocationCreate: function () {
    return new Promise((resolve, reject) => {
      //创建表格在executeSql方法里写
      plus.sqlite.executeSql({
        name: "xj",
        //表格创建或者打开,后面为表格结构
        sql:
          "CREATE TABLE if not exists d_location (\n" +
          ' "fID" text NOT NULL,\n' +
          ' "fTaskCode" text,\n' +
          ' "fLongitude" text,\n' +
          ' "fLatitude" text,\n' +
          ' "fExecTime" text,\n' +
          ' "fDeviceNo" text,\n' +
          ' "fInspector" text,\n' +
          ' "fPhoneFactory" text,\n' +
          ' "fPhoneModel" text,\n' +
          ' "fVersion" text,\n' +
          ' "fPhoneVersion" text,\n' +
          ' PRIMARY KEY ("fID")\n' +
          ");",
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        },
      });
    });
  },

  // ---------------------------------------------------插入数据-----------------------------------------------------------------
  //向表格里添加数据
  //根据表格的列来添加信息
  //因为list列我设为自动增加,所以不用添加数据
  //values里是传过来要存的值,我这里是动态的,单引号加双引号拼接
  addDLocation: function (dataList) {
    //判断有没有传参
    if (dataList) {
      //判断传的参是否有值
      let b = JSON.stringify(dataList) === "[]";
      if (!b) {
        // 传过来的list循环遍历插入表中
        for (let item of dataList) {
          //obj传来的参数对象
          let fID = item.fID; // 主键(uuid)
          let fTaskCode = item.fTaskCode || ""; // 任务id
          let fLongitude = item.fLongitude || ""; // 经度
          let fLatitude = item.fLatitude || ""; // 维度
          let fExecTime = item.fExecTime || ""; // 执行时间(当前时间)
          let fDeviceNo = item.fDeviceNo || ""; // 设备id(手机的唯一标识符)
          let fInspector = item.fInspector || ""; // 操作人(可以为空)
          let fPhoneFactory = item.fPhoneFactory || ""; // 手机厂商(可以为空)
          let fPhoneModel = item.fPhoneModel || ""; // 手机型号(可以为空)
          let fVersion = item.fVersion || ""; // 软件版本(可以为空)
          let fPhoneVersion = item.fPhoneVersion || ""; // 手机系统版本(可以为空)
          plus.sqlite.executeSql({
            name: "xj",
            sql:
              "insert into d_location(fID,fTaskCode,fLongitude,fLatitude,fExecTime,fDeviceNo,fInspector,fPhoneFactory,fPhoneModel,fVersion,fPhoneVersion) " +
              'values("' +
              fID +
              '","' +
              fTaskCode +
              '","' +
              fLongitude +
              '","' +
              fLatitude +
              '","' +
              fExecTime +
              '","' +
              fDeviceNo +
              '","' +
              fInspector +
              '","' +
              fPhoneFactory +
              '","' +
              fPhoneModel +
              '","' +
              fVersion +
              '","' +
              fPhoneVersion +
              '")',
            success(e) {
              resolve(e);
            },
            fail(e) {
              reject(e);
            },
          });
        }
        return new Promise((resolve, reject) => {
          reject("成功添加");
        });
      } else {
        return new Promise((resolve, reject) => {
          reject("错误添加");
        });
      }
    } else {
      return new Promise((resolve, reject) => {
        reject("错误添加");
      });
    }
  },
  /*查询定位信息*/
  selectLocationAddTaskCode: function (
    tableName,
    column1,
    value1,
    column2,
    value2
  ) {
    if (tableName) {
      var sql = "";
      //两个参数是列表名,用来检索
      if (column1 && column2 && value1 && value2) {
        //两个检索条件
        sql =
          "select * from " +
          tableName +
          " where " +
          column1 +
          '>="' +
          value1 +
          '" and ' +
          column2 +
          '<="' +
          value2 +
          '"';
      }
      return new Promise((resolve, reject) => {
        plus.sqlite.selectSql({
          name: "xj",
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          },
        });
      });
    } else {
      return new Promise((resolve, reject) => {
        reject("错误查询");
      });
    }
  },
  // ---------------------------------------------------查询数据-----------------------------------------------------------------
  //查询获取数据库里的数据
  //根据传过来的值来获取信息,我这里写了可以有两个条件来获取,都是动态的
  //第一个参数为表格名,aa,bb分别为列名和列的值 , cc,dd同前面
  //传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
  selectInformationType: function (name, aa, bb, cc, dd) {
    if (name !== undefined) {
      //第一个是表单名称,后两个参数是列表名,用来检索
      if (aa !== undefined && cc !== undefined) {
        //两个检索条件
        var sql =
          "select * from " +
          name +
          " where " +
          aa +
          "=" +
          bb +
          " and " +
          cc +
          "=" +
          dd +
          "";
      }
      if (aa !== undefined && cc == undefined) {
        //一个检索条件
        var sql = "select * from " + name + " where " + aa + "=" + bb + "";
      }
      if (aa == undefined) {
        var sql = "select * from " + name + "";
      }
      return new Promise((resolve, reject) => {
        plus.sqlite.selectSql({
          name: "xj",
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          },
        });
      });
    } else {
      return new Promise((resolve, reject) => {
        reject("错误查询");
      });
    }
  },

  // ---------------------------------------------------删除数据-----------------------------------------------------------------
  //删除数据库里的数据
  //参数跟上面查询获取数据一样
  //传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
  deleteInformationType: function (name, sol, qq, ww, ee) {
    if (name !== undefined && sol !== undefined) {
      //listId为表名,后面两个是列表名,检索用的
      if (ww !== undefined) {
        //两个检索条件
        var sql =
          "delete from " +
          name +
          " where " +
          sol +
          '="' +
          qq +
          '" and ' +
          ww +
          "=" +
          ee +
          "";
      } else {
        //一个检索条件
        var sql = "delete from " + name + " where " + sol + '="' + qq + '"';
      }
      return new Promise((resolve, reject) => {
        plus.sqlite.executeSql({
          name: "xj",
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          },
        });
      });
    } else {
      return new Promise((resolve, reject) => {
        reject("错误删除");
      });
    }
  },

  // ---------------------------------------------------修改数据-----------------------------------------------------------------
  //修改数据表里的数据
  //第一个参数为表格名,name为要修改的列名,cont为要修改为什么值,use,sel为搜索条件,分别是列名和列值
  //传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
  modifyInformation: function (listName, name, cont, use, sel) {
    //表格名,要修改地方的列名,修改后的内容,修改条件查询,列名,内容
    var sql;
    if (use == undefined) {
      sql = "update " + listName + " set " + name + '="' + cont + '"';
    } else {
      sql =
        "update " +
        listName +
        " set " +
        name +
        '="' +
        cont +
        '" where ' +
        use +
        '="' +
        sel +
        '"';
    }
    //where前面的是要修改的,后面的是条件,选择哪个
    return new Promise((resolve, reject) => {
      plus.sqlite.executeSql({
        name: "xj",
        sql: sql,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        },
      });
    });
  },

  // ---------------------------------------------------关闭数据库-----------------------------------------------------------------
  //关闭数据库
  closeSQL: function (name) {
    return new Promise((resolve, reject) => {
      plus.sqlite.closeDatabase({
        name: "xj",
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        },
      });
    });
  },

  // ---------------------------------------------------监听数据库是否开启-----------------------------------------------------------------
  //监听数据库是否开启
  isOpen: function (name, path) {
    var ss = name || "xj";
    var qq = path || "_doc/xj.db";
    //数据库打开了就返回true,否则返回false
    var open = plus.sqlite.isOpenDatabase({
      name: ss,
      path: qq,
    });
    return open;
  },

  //一次获取指定数据条数
  //不想一次性把数据全拿过来就可以这样写
  //id为表格名,desc代表倒序拿数据,正常是从第一条开始拿,倒序就从最后一条也是最新的一条数据开始拿
  //limit 15 offset '+num+'',后面这是两个单引号,这句的意思是跳过多少条拿15条数据,num是动态值
  //比如你刚开始给num设为0,那就从最后面的数据开始拿15条,你下次肯定不想再拿刚刚获取到的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
  pullSQL: function (id, num) {
    //id为表名,num为跳过多少条数据
    //根据list来倒序拿数据,跳过num条拿取15条
    return new Promise((resolve, reject) => {
      plus.sqlite.selectSql({
        name: "xj",
        sql:
          "select * from " +
          id +
          " order by list desc limit 15 offset " +
          num +
          "",
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        },
      });
    });
  },
};

//把这些方法导出去
export default sqlite;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档