uni-app集成使用SQLite數(shù)據(jù)庫的方法步驟
一、勾選SQLite數(shù)據(jù)庫選項(xiàng)
(1)HBuilder工具打開**項(xiàng)目
(2)**項(xiàng)目/manifest.json =》App模塊配置 =》勾選SQLite(數(shù)據(jù)庫)
二、封裝sqlite.js
在項(xiàng)目根目錄下創(chuàng)建sqlite/sqlite.js
sqlite.js:
// 數(shù)據(jù)庫名稱 const dbName ='app'; // 數(shù)據(jù)庫地址,推薦以下劃線為開頭 _doc/xxx.db // 如果路徑不為_downloads/xxx.db,在手機(jī)中會(huì)找不到文件夾(強(qiáng)烈建議:不要修改路徑) const dbPath ='_downloads/app.db'; // 判斷數(shù)據(jù)庫是否打開(箭頭函數(shù)) const isOpen = () =>{ // 數(shù)據(jù)庫打開了就返回 true,否則返回 false var open = plus.sqlite.isOpenDatabase({ name: dbName, // 數(shù)據(jù)庫名稱 path: dbPath // 數(shù)據(jù)庫地址 }) return open; } // 創(chuàng)建數(shù)據(jù)庫 或 有該數(shù)據(jù)庫就打開(普通函數(shù)) const openSqlite = function() { return new Promise((resolve, reject) => { // 打開數(shù)據(jù)庫 plus.sqlite.openDatabase({ name: dbName, path: dbPath, success(e) { resolve(e); // 成功回調(diào) }, fail(e) { reject(e); // 失敗回調(diào) } }) }) } // 關(guān)閉數(shù)據(jù)庫(箭頭函數(shù)) const closeSqlite = () => { return new Promise((resolve, reject) => { plus.sqlite.closeDatabase({ name: dbName, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } // 普通函數(shù) // 數(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)里是表格的表頭 // @param {Object} dbTable:表名 // @param {Object} data : 表結(jié)構(gòu) const createTable = function(dbTable, data) { return new Promise((resolve, reject) => { // executeSql: 執(zhí)行增刪改等操作的SQL語句 plus.sqlite.executeSql({ name: dbName, sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } // 數(shù)據(jù)庫刪表 sql:'DROP TABLE dbTable'(箭頭函數(shù)) // @param {Object} dbTable:表名 const dropTable = (dbTable) => { return new Promise((resolve, reject) => { plus.sqlite.executeSql({ name: dbName, sql: `DROP TABLE ${dbTable}`, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } // 普通函數(shù) // 向表格里添加數(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ù)表頭列名插入列值 // @param {Object} dbTable:表名 // @param {Object} data : 插入表中的值結(jié)構(gòu) // @param {Object} condition : 插入表中對(duì)應(yīng)的列的屬性名稱結(jié)構(gòu) const insertTableData = function(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: 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ò)誤添加") }) } } // 箭頭函數(shù) // 根據(jù)條件向表格里添加數(shù)據(jù) 有數(shù)據(jù)更新、無數(shù)據(jù)插入 // (建表時(shí)需要設(shè)置主鍵) 例如 --- "roomid" varchar(50) PRIMARY KEY // @param {Object} dbTable:表名 // @param {Object} data : 插入表中的值結(jié)構(gòu) // @param {Object} condition : 插入表中對(duì)應(yīng)的列的屬性名稱結(jié)構(gòu) const 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: dbName, sql: sql, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } else { return new Promise((resolve, reject) => { reject("錯(cuò)誤添加") }) } } // 普通函數(shù) // 查詢獲取數(shù)據(jù)庫里的數(shù)據(jù) sql:'SELECT * FROM dbTable WHERE lname = 'lvalue'' // 查詢 SELECT * FROM 、 dbTable 是表名、 WHERE 查找條件 lname,lvalue 是查詢條件的列名和列值 // @param {Object} dbTable:表名 // @param {Object} lname:列名 // @param {Object} lvalue:列中的屬性值 const selectTableData = function(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: dbName, sql: sql, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } else { return new Promise((resolve, reject) => { reject("錯(cuò)誤查詢") }); } } // 箭頭函數(shù) // 刪除表里的數(shù)據(jù) sql:'DELETE FROM dbTable WHERE lname = 'lvalue'' // 刪除 DELETE FROM 、 dbTable 是表名、 WHERE 查找條件 lname,lvalue 是查詢條件的列名和列值 // @param {Object} dbTable:表名 // @param {Object} lname:列名 // @param {Object} lvalue:列中的屬性值 const 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: dbName, sql: sql, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } else { return new Promise((resolve, reject) => { reject("錯(cuò)誤刪除") }); } } // 普通函數(shù) // 修改數(shù)據(jù)表里的數(shù)據(jù) sql:"UPDATE dbTable SET 列名 = '列值',列名 = '列值' WHERE lname = 'lvalue'" // 修改 UPDATE 、 dbTable 是表名, data: 要修改的列名=修改后列值, lname,lvalue 是查詢條件的列名和列值 // @param {Object} dbTable:表名 // @param {Object} data : 修改表中的值結(jié)構(gòu) // @param {Object} lname:列名 // @param {Object} lvalue:列中的屬性值 const updateTableData = function(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: dbName, sql: sql, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } // 箭頭函數(shù) // 獲取指定數(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ù) // @param {Object} dbTable:表名 // @param {Object} id:數(shù)據(jù)id /** * @param {Object} num 例子如下: * select * from boot limit 10 offset 0; * select * from boot limit 10 offset 10; * select * from boot limit 10 offset 20; * select * from boot limit 10 offset 30; * 比如說每頁數(shù)量為 10 條,然后我們分別獲區(qū)第1、2、3、4頁的數(shù)據(jù) * */ const pullSQL = (dbTable, id, num) => { return new Promise((resolve, reject) => { plus.sqlite.selectSql({ name: dbName, sql: `SELECT * FROM ${dbTable} ORDER BY '${id}' DESC LIMIT 15 OFFSET '${num}'`, success(e) { resolve(e); }, fail(e) { reject(e); } }) }) } // 導(dǎo)出方法 export default { // 查詢數(shù)據(jù)庫是否打開 isOpen, // 創(chuàng)建/開啟數(shù)據(jù)庫 openSqlite, // 關(guān)閉數(shù)據(jù)庫 closeSqlite, // 數(shù)據(jù)庫建表 createTable, // 數(shù)據(jù)庫刪表 dropTable, // 表里新增/插入數(shù)據(jù) insertTableData, // 根據(jù)條件向表里插入數(shù)據(jù)、更新或覆蓋 insertOrReplaceData, // 表里查詢數(shù)據(jù) selectTableData, // 表里刪除數(shù)據(jù) deleteTableData, // 表里修改數(shù)據(jù) updateTableData, // 倒敘查詢數(shù)據(jù) pullSQL }
三、使用
注意:如果列的屬性是varchar、TEXT修飾的,插入數(shù)據(jù)前后需要用單引號(hào)-' '
<template> *** *** <view class="content"> <button @click="dbClick">按鈕</button> </view> </template> <script> // 引入salite.js import DB from '@/sqlite/sqlite.js'; export default { data() { return { title: 'Hello' } }, onLoad() { }, methods: { dbClick(){ // 創(chuàng)建/開啟數(shù)據(jù)庫 DB.openSqlite().then((res)=>{ console.log("創(chuàng)建/開啟數(shù)據(jù)庫",res); }).catch((err)=>{ console.log("創(chuàng)建/開啟數(shù)據(jù)庫失敗",err); }) // 查詢數(shù)據(jù)庫是否打開 const flag = DB.isOpen(); console.log("數(shù)據(jù)庫是否打開",flag); // 關(guān)閉數(shù)據(jù)庫 //const close = DB.closeSqlite() //console.log("關(guān)閉數(shù)據(jù)庫",close); // 數(shù)據(jù)庫建表 const dbTable = "demo";// 表名 const data = "'id' varchar(50) PRIMARY KEY,'name' TEXT, 'age' INTEGER,'date_column' TEXT";// 表結(jié)構(gòu) DB.createTable(dbTable,data).then((res)=>{ console.log("數(shù)據(jù)庫建表",res); }).catch((err)=>{ console.log("數(shù)據(jù)庫建表失敗",err); }) // 數(shù)據(jù)庫刪表 //DB.dropTable() // 表里新增/插入數(shù)據(jù) // 注意:如果列的屬性是varchar、TEXT修飾的,插入數(shù)據(jù)前后需要用單引號(hào)-'' const inDBTable = "demo";// 表名 const date = new Date();// 日期 const inData = "22, 'zdy', 20, '2024/11/20'";// 插入的值 const inCondition = "id, name, age, date_column";// 表中列名(可以不寫) DB.insertTableData(inDBTable,inData).then((res)=>{ console.log("表里新增/插入數(shù)據(jù)",res) }).catch((err)=>{ console.log("表里新增/插入數(shù)據(jù)失敗",err) }) // 實(shí)驗(yàn)方法同上 // 根據(jù)條件向表里插入數(shù)據(jù)、更新或覆蓋 const inOrReDBTable = "demo";// 表名 const inOrReData = "29, 'zgy', 36, '2024/11/21'";// 插入的值 const inOrReCondition = "id, name, age, date_column";// 表中列名(可以不寫) DB.insertOrReplaceData(inOrReDBTable,inOrReData).then((res)=>{ console.log("表里插入數(shù)據(jù)、更新或覆蓋成功",res) }).catch((err)=>{ console.log("表里插入數(shù)據(jù)、更新或覆蓋失敗",err) }) // 表里刪除數(shù)據(jù) const delDBTable = "demo";// 表名 const delname = "id"; const delvalue = "22"; DB.deleteTableData(delDBTable,delname,delvalue).then((res)=>{ console.log("表里刪除數(shù)據(jù)",res) }).catch((err)=>{ console.log("表里刪除數(shù)據(jù)失敗",err) }) // 表里修改數(shù)據(jù) const updateDBTable = "demo";// 表名 const updateDate = "name = '張姓', age = 31, date_column='2024/8/10'" const updateName = "id"; const updateValue = "22"; DB.updateTableData(updateDBTable,updateDate,updateName,updateValue).then((res)=>{ console.log("表里修改數(shù)據(jù)",res) }).catch((err)=>{ console.log("表里修改數(shù)據(jù)失敗",err) }) // 表里查詢數(shù)據(jù) const queryDBTable = "demo";// 表名 const lname = "id"; const lvalue = "22"; DB.selectTableData(queryDBTable,lname,lvalue).then((res)=>{ console.log("表里查詢數(shù)據(jù)",res) }).catch((err)=>{ console.log("表里查詢數(shù)據(jù)失敗",err) }) // 倒敘查詢數(shù)據(jù) const pullDBTable = "demo";// 表名 const pullId = "22"; const pullNum = "10"; DB.pullSQL(pullDBTable,pullId,pullNum).then((res)=>{ console.log("倒敘查詢數(shù)據(jù)",res) }).catch((err)=>{ console.log("倒敘查詢數(shù)據(jù)失敗",err) }) } } } </script scoped lang="scss"> <style> *** *** .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } </style>
四、數(shù)據(jù)庫
在手機(jī)中數(shù)據(jù)庫路徑為:**電腦\移動(dòng)設(shè)備名稱\內(nèi)部存\Android\data\io.dcloud.HBuilder\downloads
數(shù)據(jù)庫可以用SQLiteExpert軟件打開
總結(jié)
到此這篇關(guān)于uni-app集成使用SQLite數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)uni-app集成使用SQLite內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
BootStrap中的Fontawesome 圖標(biāo)
這篇文章主要介紹了BootStrap中Fontawesome 圖標(biāo)的相關(guān)知識(shí),需要的朋友可以參考下2017-05-05JavaScript中校驗(yàn)銀行卡號(hào)的實(shí)現(xiàn)代碼
本文通過案例給大家介紹了js中校驗(yàn)銀行卡號(hào)的代碼,代碼小編測試過,可行。代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12由JavaScript技術(shù)實(shí)現(xiàn)的web小游戲(不含網(wǎng)游)
伴隨Ajax與網(wǎng)頁游戲的崛起,曾幾何時(shí)JavaScript也成了游戲開發(fā)時(shí)可供選擇的技術(shù)之一,文本 僅列舉數(shù)項(xiàng)由JavaScript技術(shù)實(shí)現(xiàn)的web小游戲(不含網(wǎng)游),聊作參考之用。2010-06-06JavaScript遍歷實(shí)現(xiàn)DFS算法和BFS算法
DFS(Depth?first?search)稱作「深度優(yōu)先遍歷」,BFS(Breadth?first?search)稱作「廣度優(yōu)先遍歷」。本文將通過JavaScript遍歷實(shí)現(xiàn)這兩種算法,需要的可以參考一下2023-01-01layui 監(jiān)聽select選擇 獲取當(dāng)前select的ID名稱方法
今天小編就為大家分享一篇layui 監(jiān)聽select選擇 獲取當(dāng)前select的ID名稱方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09JS中的回調(diào)函數(shù)(callback)講解
回調(diào)函數(shù)是一段可執(zhí)行的代碼段,它作為一個(gè)參數(shù)傳遞給其他的代碼,其作用是在需要的時(shí)候方便調(diào)用這段(回調(diào)函數(shù))代碼,這篇文章主要介紹了JS中的?回調(diào)函數(shù)(callback),需要的朋友可以參考下2022-12-12npm install報(bào)錯(cuò)無法創(chuàng)建packge.json文件的解決辦法
當(dāng)你在運(yùn)行 npm install 時(shí)遇到錯(cuò)誤,提示無法找到 package.json 文件,也沒有創(chuàng)建一個(gè) package.json 文件,只創(chuàng)建了一個(gè)package-lock.json文件,本文給大家介紹詳細(xì)的解決辦法,需要的朋友可以參考下2024-02-02深入學(xué)習(xí) JavaScript中的函數(shù)調(diào)用
可能很多人在學(xué)習(xí) JavaScript 過程中碰到過函數(shù)參數(shù)傳遞方式的迷惑,本著深入的精神,我給大家分享了一篇教程關(guān)于javascript中的函數(shù)調(diào)用知識(shí),感興趣的朋友一起學(xué)習(xí)吧2017-03-03