uniapp 使用數(shù)據(jù)庫

1. uniapp 開發(fā) App 使用數(shù)據(jù)庫

你沒看錯(cuò) uniapp 是可以使用本地?cái)?shù)據(jù)庫的, 下面給你們介紹怎么使用 SQLite (數(shù)據(jù)庫)螟碎。

第一步 勾選 SQLite (數(shù)據(jù)庫)

image.png

第二步 使用 SQLite (數(shù)據(jù)庫)

  1. uniapp 中創(chuàng)建 一個(gè) sqlite 文件夾 (名稱隨便寫沒有限制)
  2. sqlite文件夾 下創(chuàng)建 一個(gè) sqlite.js宫仗。
  3. sqlite.js 內(nèi)容寂祥。
module.exports = {
 dbName: 'app', // 數(shù)據(jù)庫名稱
dbPath: '_downloads/app.db', // 數(shù)據(jù)庫地址,推薦以下劃線為開頭   _doc/xxx.db

  // 判斷數(shù)據(jù)庫是否打開
  isOpen() {
    // 數(shù)據(jù)庫打開了就返回 true,否則返回 false
    var open = plus.sqlite.isOpenDatabase({
      name: this.dbName,  // 數(shù)據(jù)庫名稱
      path: this.dbPath  // 數(shù)據(jù)庫地址
    })
    return open;
  },

  // 創(chuàng)建數(shù)據(jù)庫 或 有該數(shù)據(jù)庫就打開
  openSqlite() {
    return new Promise((resolve, reject) => {
      // 打開數(shù)據(jù)庫
      plus.sqlite.openDatabase({
        name: this.dbName,
        path: this.dbPath,
        success(e) {
          resolve(e); // 成功回調(diào)
        },
        fail(e) {
          reject(e);  // 失敗回調(diào)
        }
      })
    })
  },

  // 關(guān)閉數(shù)據(jù)庫
  closeSqlite() {
    return new Promise((resolve, reject) => {
      plus.sqlite.closeDatabase({
        name: this.dbName,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },

  // 數(shù)據(jù)庫建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT) 
  // 創(chuàng)建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用數(shù)字開頭昌屉、括號(hào)里是表格的表頭
  createTable(dbTable, data) {
    return new Promise((resolve, reject) => {
      // executeSql: 執(zhí)行增刪改等操作的SQL語句
      plus.sqlite.executeSql({
        name: this.dbName,
        sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },

  // 數(shù)據(jù)庫刪表 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);
        }
      })
    })
  },

  // 向表格里添加數(shù)據(jù) sql:'INSERT INTO dbTable VALUES('x','x','x')'   對(duì)應(yīng)新增
  // 或者 sql:'INSERT INTO dbTable ('x','x','x') VALUES('x','x','x')'   具體新增
  // 插入 INSERT INTO  钙蒙、 dbTable 是表名、根據(jù)表頭列名插入列值
  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) => {
          // 表格添加數(shù)據(jù)
          plus.sqlite.executeSql({
            name: this.dbName,
            sql: sql,
            success(e) {
              resolve(e);
            },
            fail(e) {
              reject(e);
            }
          })
        })
      } else {
        return new Promise((resolve, reject) => { reject("錯(cuò)誤添加") })
      }
    } else {
      return new Promise((resolve, reject) => { reject("錯(cuò)誤添加") })
    }
  },
  
  // 根據(jù)條件向表格里添加數(shù)據(jù)  有數(shù)據(jù)更新怠益、無數(shù)據(jù)插入
  // (建表時(shí)需要設(shè)置主鍵) 例如 --- "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) => {
          // 表格添加數(shù)據(jù)
          plus.sqlite.executeSql({
            name: this.dbName,
            sql: sql,
            success(e) {
              resolve(e);
            },
            fail(e) {
              reject(e);
            }
          })
      })
    } else {
      return new Promise((resolve, reject) => { reject("錯(cuò)誤添加") })
    }
  },

  // 查詢獲取數(shù)據(jù)庫里的數(shù)據(jù) sql:'SELECT * FROM dbTable WHERE lname = 'lvalue''
  // 查詢 SELECT * FROM 仪搔、 dbTable 是表名、 WHERE 查找條件 lname,lvalue 是查詢條件的列名和列值
  selectTableData(dbTable, lname, lvalue, cc, dd) {
    if (dbTable !== undefined) {
      // 第一個(gè)是表單名稱蜻牢,后兩個(gè)參數(shù)是列表名烤咧,用來檢索
      if (lname !== undefined && cc !== undefined) {
        // 兩個(gè)檢索條件
        var sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${cc} = '${dd}'`;
      }
      if (lname !== undefined && cc == undefined) {
        // 一個(gè)檢索條件
        var sql = `SELECT * FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
        // console.log(sql);
      }
      if (lname == undefined) {
        var sql = `SELECT * FROM ${dbTable}`;
      }
      return new Promise((resolve, reject) => {
        // 表格查詢數(shù)據(jù)  執(zhí)行查詢的SQL語句
        plus.sqlite.selectSql({
          name: this.dbName,
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          }
        })
      })
    } else {
      return new Promise((resolve, reject) => { reject("錯(cuò)誤查詢") });
    }
  },

  // 刪除表里的數(shù)據(jù) 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) {
          // 兩個(gè)檢索條件
          var sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}' AND ${ww} = '${ee}'`;
        } else {
          // 一個(gè)檢索條件
          var sql = `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}'`;
        }
      }
      return new Promise((resolve, reject) => {
        // 刪除表數(shù)據(jù)
        plus.sqlite.executeSql({
          name: this.dbName,
          sql: sql,
          success(e) {
            resolve(e);
          },
          fail(e) {
            reject(e);
          }
        })
      })
    } else {
      return new Promise((resolve, reject) => { reject("錯(cuò)誤刪除") });
    }
  },

  // 修改數(shù)據(jù)表里的數(shù)據(jù) 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) => {
      // 修改表數(shù)據(jù)
      plus.sqlite.executeSql({
        name: this.dbName,
        sql: sql,
        success(e) {
          resolve(e);
        },
        fail(e) {
          reject(e);
        }
      })
    })
  },

  // 獲取指定數(shù)據(jù)條數(shù)  sql:"SELECT * FROM dbTable ORDER BY 'id' DESC LIMIT 15 OFFSET 'num'"
  // dbTable 表名, ORDER BY 代表排序默認(rèn)正序, id 是排序的條件 DESC 代表倒序,從最后一條數(shù)據(jù)開始拿
  // LIMIT 15 OFFSET '${num}',這句的意思是跳過 num 條拿 15 條數(shù)據(jù), num 為跳過多少條數(shù)據(jù)是動(dòng)態(tài)值
  // 例 初始num設(shè)為0恳邀,就從最后的數(shù)據(jù)開始拿15條懦冰,下次不拿剛獲取的數(shù)據(jù),所以可以讓num為15谣沸,這樣就能一步一步的拿完所有的數(shù)據(jù)
  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);
        }
      })
    })
  }

4 . 在頁面 import引入 sqlite.js

// 引入
import DB from "@/sqlite/sqlite.js";

// 查詢數(shù)據(jù)庫是否打開
DB.isOpen()

// 創(chuàng)建/開啟數(shù)據(jù)庫
DB.openSqlite()

// 關(guān)閉數(shù)據(jù)庫
DB.closeSqlite()

// 數(shù)據(jù)庫建表
DB.createTable()

// 數(shù)據(jù)庫刪表
DB.dropTable()

// 表里新增/插入數(shù)據(jù)
DB.insertTableData()

// 根據(jù)條件向表里插入數(shù)據(jù)刷钢、更新或覆蓋
DB.insertOrReplaceData()

// 表里查詢數(shù)據(jù)
DB.selectTableData()

// 表里刪除數(shù)據(jù)
DB.deleteTableData()

// 表里修改數(shù)據(jù)
DB.updateTableData()

// 倒敘查詢數(shù)據(jù)
DB.pullSQL()

2. 不知道sql 語句怎么寫可以看下面地址

菜鳥教程SQL

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乳附,隨后出現(xiàn)的幾起案子内地,更是在濱河造成了極大的恐慌,老刑警劉巖赋除,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱缓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡举农,警方通過查閱死者的電腦和手機(jī)荆针,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颁糟,“玉大人祭犯,你說我怎么就攤上這事」鐾#” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵粥惧,是天一觀的道長(zhǎng)键畴。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么起惕? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任涡贱,我火速辦了婚禮,結(jié)果婚禮上惹想,老公的妹妹穿的比我還像新娘问词。我一直安慰自己,他們只是感情好嘀粱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布激挪。 她就那樣靜靜地躺著,像睡著了一般锋叨。 火紅的嫁衣襯著肌膚如雪垄分。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天娃磺,我揣著相機(jī)與錄音薄湿,去河邊找鬼。 笑死偷卧,一個(gè)胖子當(dāng)著我的面吹牛豺瘤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播听诸,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼坐求,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蛇更?” 一聲冷哼從身側(cè)響起瞻赶,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎派任,沒想到半個(gè)月后砸逊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掌逛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年师逸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豆混。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篓像,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皿伺,到底是詐尸還是另有隱情员辩,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布鸵鸥,位于F島的核電站奠滑,受9級(jí)特大地震影響丹皱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宋税,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一摊崭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杰赛,春花似錦呢簸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓶珊,卻和暖如春啸箫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伞芹。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工忘苛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱较。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓扎唾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親南缓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胸遇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容