uniapp中如何使用sqlite数据库

内容分享3周前发布
0 0 0

uniapp中可以不连接数据库而使用sqlite本地数据库,第一创建sqlite.js文件对数据库的操作进行封装

module.exports = {
  dbName:  xxx , // 数据库名称
  dbPath:  _downloads/xxx.db , // 数据库地址,推荐以下划线为开头   _doc/xxx.db
 
  // 判断数据库是否打开
  isOpen() {
    // 数据库打开了就返回 true,否则返回 false
    var open = plus.sqlite.isOpenDatabase({
      name: this.dbName,  // 数据库名称
      path: this.dbPath  // 数据库地址
    })
    return open;
  },
 
  // 创建数据库 或 有该数据库就打开
  openSqlite() {
    return new Promise((resolve, reject) => {
      // 打开数据库
      plus.sqlite.openDatabase({
        name: this.dbName,
        path: this.dbPath,
        success(e) {
          resolve(e); // 成功回调
        },
        fail(e) {
          reject(e);  // 失败回调
        }
      })
    })
  },
 
  // 关闭数据库
  closeSqlite() {
    return new Promise((resolve, reject) => {
      plus.sqlite.closeDatabase({
        name: this.dbName,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },
 
  // 数据库建表 sql: CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT) 
  // 创建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用数字开头、括号里是表格的表头
  createTable(dbTable, data) {
    return new Promise((resolve, reject) => {
      // executeSql: 执行增删改等操作的SQL语句
      plus.sqlite.executeSql({
        name: this.dbName,
        sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },
 
  // 数据库删表 sql: DROP TABLE dbTable 
  dropTable(dbTable) {
    return new Promise((resolve, reject) => {
      plus.sqlite.executeSql({
        name: this.dbName,
        sql: `DROP TABLE ${dbTable}`,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },
 
  // 向表格里添加数据 sql: INSERT INTO dbTable VALUES( x , x , x )    对应新增
  // 或者 sql: INSERT INTO dbTable ( x , x , x ) VALUES( x , x , x )    具体新增
  // 插入 INSERT INTO  、 dbTable 是表名、根据表头列名插入列值
  insertTableData(dbTable, data, condition) {
    // 判断有没有传参
    if (dbTable !== undefined && data !== undefined) {
      // 判断传的参是否有值
      var bol = (JSON.stringify(data) == "{}");
      if (!bol) {
        if (condition == undefined) {
          var sql = `INSERT INTO ${dbTable} VALUES( ${data} )`;
        } else {
          var sql = `INSERT INTO ${dbTable} (${condition}) VALUES(${data})`;
        }
        // console.log(sql);
        return new Promise((resolve, reject) => {
          // 表格添加数据
          plus.sqlite.executeSql({
            name: this.dbName,
            sql: sql,
            success(e) {
              resolve(e);
            },
            fail(e) {
              reject(e);
            }
          })
        })
      } else {
        return new Promise((resolve, reject) => { reject("错误添加") })
      }
    } else {
      return new Promise((resolve, reject) => { reject("错误添加") })
    }
  },
  
  // 根据条件向表格里添加数据  有数据更新、无数据插入
  // (建表时需要设置主键) 例如 --- "roomid" varchar(50) PRIMARY KEY
  insertOrReplaceData(dbTable, data, condition) {
    // 判断有没有传参
    if (dbTable !== undefined && data !== undefined) {
        if (condition == undefined) {
          var sql = `INSERT OR REPLACE INTO ${dbTable} VALUES( ${data} )`;
        } else {
          var sql = `INSERT OR REPLACE INTO ${dbTable} (${condition}) VALUES(${data})`;
        }
        // console.log(sql);
        return new Promise((resolve, reject) => {
          // 表格添加数据
          plus.sqlite.executeSql({
            name: this.dbName,
            sql: sql,
            success(e) {
              resolve(e);
            },
            fail(e) {
              reject(e);
            }
          })
      })
    } else {
      return new Promise((resolve, reject) => { reject("错误添加") })
    }
  },
 
  // 查询获取数据库里的数据 sql: SELECT * FROM dbTable WHERE lname =  lvalue  
  // 查询 SELECT * FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  selectTableData(dbTable, uname, namevalue, upass, passvalue,urrn,rrnvalue) {
    if (dbTable !== undefined) {
      // 第一个是表单名称,后两个参数是列表名,用来检索
      if (uname !== undefined && upass !== undefined && urrn!==undefined) {
        // 三个检索条件
        var sql = `SELECT * FROM ${dbTable} WHERE ${uname} =  ${namevalue}  AND ${upass} =  ${passvalue}  AND ${urrn}= ${rrnvalue} `;
      }
      if (uname !== undefined && upass !== undefined &&urrn==undefined) {
        // 两个检索条件
        var sql = `SELECT * FROM ${dbTable} WHERE ${uname} =  ${namevalue}  AND ${upass} =  ${passvalue} `;
      }
      if (uname !== undefined && upass == undefined && urrn==undefined ) {
        // 一个检索条件
        var sql = `SELECT * FROM ${dbTable} WHERE ${uname} =  ${namevalue} `;
        // console.log(sql);
      }
      if (uname == undefined) {
        var sql = `SELECT * FROM ${dbTable}`;
      }
      return new Promise((resolve, reject) => {
        // 表格查询数据  执行查询的SQL语句
        plus.sqlite.selectSql({
          name: this.dbName,
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          }
        })
      })
    } else {
      return new Promise((resolve, reject) => { reject("错误查询") });
    }
  },
 
  // 删除表里的数据 sql: DELETE FROM dbTable WHERE lname =  lvalue  
  // 删除 DELETE FROM 、 dbTable 是表名、 WHERE 查找条件 lname,lvalue 是查询条件的列名和列值
  deleteTableData(dbTable, lname, lvalue, ww, ee) {
    if (dbTable !== undefined) {
      if (lname == undefined) {
        var sql = `DELETE FROM ${dbTable}`;
      } else {
        if (ww !== undefined) {
          // 两个检索条件
          var sql = `DELETE FROM ${dbTable} WHERE ${lname} =  ${lvalue}  AND ${ww} =  ${ee} `;
        } else {
          // 一个检索条件
          var sql = `DELETE FROM ${dbTable} WHERE ${lname} =  ${lvalue} `;
        }
      }
      return new Promise((resolve, reject) => {
        // 删除表数据
        plus.sqlite.executeSql({
          name: this.dbName,
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          }
        })
      })
    } else {
      return new Promise((resolve, reject) => { reject("错误删除") });
    }
  },
 
  // 修改数据表里的数据 sql:"UPDATE dbTable SET 列名 =  列值 ,列名 =  列值  WHERE lname =  lvalue "
  // 修改 UPDATE 、 dbTable 是表名, data: 要修改的列名=修改后列值, lname,lvalue 是查询条件的列名和列值
  updateTableData(dbTable, data, lname, lvalue) {
    if (lname == undefined) {
      var sql = `UPDATE ${dbTable} SET ${data}`;
    } else {
      var sql = `UPDATE ${dbTable} SET ${data} WHERE ${lname} =  ${lvalue} `;
    }
    // WHERE 前面是要修改的列名、列值,后面是条件的列名、列值
    return new Promise((resolve, reject) => {
      // 修改表数据
      plus.sqlite.executeSql({
        name: this.dbName,
        sql: sql,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },
 
  // 获取指定数据条数  sql:"SELECT * FROM dbTable ORDER BY  id  DESC LIMIT 15 OFFSET  num "
  // dbTable 表名, ORDER BY 代表排序默认正序, id 是排序的条件 DESC 代表倒序,从最后一条数据开始拿
  // LIMIT 15 OFFSET  ${num} ,这句的意思是跳过 num 条拿 15 条数据, num 为跳过多少条数据是动态值
  // 例 初始num设为0,就从最后的数据开始拿15条,下次不拿刚获取的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
  pullSQL(dbTable, id, num) {
    return new Promise((resolve, reject) => {
      plus.sqlite.selectSql({
        name: this.dbName,
        sql: `SELECT * FROM ${dbTable} ORDER BY  ${id}  DESC LIMIT 15 OFFSET  ${num} `,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  }
}

在使用的页面引入sqlite.js文件

<template>
    <view>
        <view class="uni-divider uni-divider__content">Demo</view>
        <button @click="openSQL">打开数据库</button>
        <button @click="createTable">创建表</button>
        <button @click="insertTableData">新增表数据</button>
        <button @click="selectTableData">查询表数据</button>
        <button @click="updateTableData">修改表数据</button>
        <button @click="deleteTableData">按条件删除表数据</button>
        <button @click="closeSQL">关闭数据库</button>
 
        <view class="uni-divider__content" v-for="(item,index) in listData" :key= index >
            <view>名字:{{item.name}}</view>
            <view>内容:{{item.content}}</view>
            <view>时间:{{item.time}}</view>
        </view>
    </view>
</template>
 
<script>
    import DB from  ../../api/sqlite/sqlite.js 
    export default {
        data() {
            return {
                listData: []
            };
        },
        onLoad() {
            this.openSQL();
        },
 
        methods: {
            // 打开数据库
            openSQL() {
                // 这个是查询有没有打开数据库
                let open = DB.isOpen();
                console.log("数据库状态", open ? "开启" : "关闭");
                if (!open) {
                    DB.openSqlite()
                        .then(res => {
                            console.log("数据库已打开");
                        })
                        .catch(error => {
                            console.log("数据库开启失败");
                        });
                }
            },
 
            // 关闭数据库
            closeSQL() {
                // 这个是查询有没有打开数据库
                let open = DB.isOpen();
                if (open) {
                    DB.closeSqlite()
                        .then(res => {
                            console.log("数据库已关闭");
                        })
                        .catch(error => {
                            console.log("数据库关闭失败");
                        });
                }
            },
 
            // 创建表
            createTable() {
                let open = DB.isOpen();
                if (open) {
                    this.openSQL();
                    let sql =
                         "id" INTEGER PRIMARY KEY AUTOINCREMENT,"name" text,"content" text,"time" text ;
                    // 创建表 DB.createTable(表名, 表的列)
                    DB.createTable("chat", sql)
                        .then(res => {
                            console.log("创建chat表成功");
                        })
                        .catch(error => {
                            console.log("创建表失败");
                        });
                } else {
                    console.log("数据库未打开");
                }
            },
            // 新增表数据
            insertTableData() {
                let open = DB.isOpen();
                if (open) {
                    let arr = [{
                            name:  小明 ,
                            content: "你好呀"
                        },
                        {
                            name:  小红 ,
                            content: "HI"
                        }
                    ]
                    arr.map(item => {
                        let time = this.formatDate(new Date().getTime());
                        let sql = ` ${item.name} , ${item.content} , ${time} `;
                        let condition = " name , content , time ";
                        // 新增 DB.insertTableData(表名, 对应表头列的数据)
                        DB.insertTableData("chat", sql, condition)
                            .then(res => {
                                console.log("新增数据成功");
                                this.selectTableData();
                            })
                            .catch(error => {
                                console.log("失败", error);
                            });
                    })
                } else {
                    this.showToast("数据库未打开");
                }
            },
            // 查询表数据
            selectTableData() {
                let open = DB.isOpen();
                if (open) {
                    // 查询表 DB.selectTableData(表名,查询条件列名,查询条件列值)
                    DB.selectTableData("chat")
                        .then(res => {
                            console.log("contact表数据", res);
                            this.listData = res;
                        })
                        .catch(error => {
                            console.log("查询失败", error);
                        });
                } else {
                    this.showToast("数据库未打开");
                }
            },
            // 修改表数据
            updateTableData() {
                let open = DB.isOpen();
                if (open) {
                    let time = this.formatDate(new Date().getTime());
                    let data = `content =  我被修改了 ,time =  ${time} `;
                    // 修改表数据 DB.updateTableData(表名, 要修改的列名=修改后列值, 修改条件的列名, 修改条件的列值)
                    DB.updateTableData("chat", data, "name", "小明")
                        .then(res => {
                            this.showToast("更新chat表成功");
                            this.selectTableData();
                        })
                        .catch(error => {
                            console.log("修改失败", error);
                        });
                } else {
                    this.showToast("数据库未打开");
                }
            },
 
            // 删除表数据
            deleteTableData() {
                let open = DB.isOpen();
                if (open) {
                    // 删除表 DB.deleteTableData(表名,查询条件列名,查询条件列值)
                    DB.deleteTableData("chat", "name", "小红")
                        .then(res => {
                            this.showToast("删除表数据成功");
                            this.selectTableData();
                        })
                        .catch(error => {
                            console.log("删除失败", error);
                        });
                } else {
                    this.showToast("数据库未打开");
                }
            },
 
 
 
 
 
            // 提示框
            showToast: function(str) {
                uni.showToast({
                    icon: "none",
                    title: str,
                    mask: true
                });
            },
 
            // 时间戳转年月日
            formatDate(data) {
                let now = new Date(data);
                var year = now.getFullYear(); //取得4位数的年份
                var month =
                    now.getMonth() + 1 < 10 ?
                    "0" + (now.getMonth() + 1) :
                    now.getMonth() + 1;
                var date = now.getDate() < 10 ? "0" + now.getDate() : now.getDate();
                var hour = now.getHours() < 10 ? "0" + now.getHours() : now.getHours();
                var minute =
                    now.getMinutes() < 10 ? "0" + now.getMinutes() : now.getMinutes();
                var second =
                    now.getSeconds() < 10 ? "0" + now.getSeconds() : now.getSeconds();
                return (
                    year +
                    "-" +
                    month +
                    "-" +
                    date +
                    " " +
                    hour +
                    ":" +
                    minute +
                    ":" +
                    second
                );
            }
        }
    };
</script>
<style>
 
</style>

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...