1. uniapp 開發(fā) App 使用數(shù)據(jù)庫
你沒看錯(cuò)
uniapp
是可以使用本地?cái)?shù)據(jù)庫的, 下面給你們介紹怎么使用 SQLite (數(shù)據(jù)庫)螟碎。
第一步 勾選 SQLite (數(shù)據(jù)庫)
第二步 使用 SQLite (數(shù)據(jù)庫)
- uniapp 中創(chuàng)建 一個(gè)
sqlite 文件夾 (名稱隨便寫沒有限制)
- 在
sqlite文件夾
下創(chuàng)建 一個(gè)sqlite.js
宫仗。 - 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()