在 uni-app 使用
sqlite要先學(xué)習(xí)簡(jiǎn)單的 SQL 語(yǔ)法。
SQLite傳送門(mén)
首要工作
-
plus.sqlite要在手機(jī)或者模擬器上才能運(yùn)行! - 在
manifest.json里的App模塊權(quán)限配置里勾選SQLite(數(shù)據(jù)庫(kù))!

HBuilderX勾選 SQLite
源碼
封裝的 sqlite.js
-
isOpen判斷是否打開(kāi)數(shù)據(jù)庫(kù) -
openSqlite創(chuàng)建數(shù)據(jù)庫(kù) / 打開(kāi)數(shù)據(jù)庫(kù) -
closeSqlite關(guān)閉數(shù)據(jù)庫(kù) -
createTable數(shù)據(jù)庫(kù)建表 -
dropTable數(shù)據(jù)庫(kù)刪表 -
insertTableData數(shù)據(jù)庫(kù)插入數(shù)據(jù)-無(wú)主鍵 -
insertOrReplaceData數(shù)據(jù)庫(kù)插入數(shù)據(jù)-有主鍵 -
selectTableData查詢獲取數(shù)據(jù)庫(kù)里數(shù)據(jù) -
deleteTableData刪除表里數(shù)據(jù) -
updateTableData更新數(shù)據(jù)表里數(shù)據(jù) -
pullSQL獲取指定數(shù)據(jù)條數(shù)
module.exports = {
dbName: 'chat', // 數(shù)據(jù)庫(kù)名稱
dbPath: '_doc/chat.db', // 數(shù)據(jù)庫(kù)地址,推薦以下劃線為開(kāi)頭 _doc/xxx.db
// 判斷數(shù)據(jù)庫(kù)是否打開(kāi)
isOpen() {
// 數(shù)據(jù)庫(kù)打開(kāi)了就返回 true,否則返回 false
var open = plus.sqlite.isOpenDatabase({
name: this.dbName, // 數(shù)據(jù)庫(kù)名稱
path: this.dbPath // 數(shù)據(jù)庫(kù)地址
})
return open;
},
// 創(chuàng)建數(shù)據(jù)庫(kù) 或 有該數(shù)據(jù)庫(kù)就打開(kāi)
openSqlite() {
return new Promise((resolve, reject) => {
// 打開(kāi)數(shù)據(jù)庫(kù)
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ù)庫(kù)
closeSqlite() {
return new Promise((resolve, reject) => {
plus.sqlite.closeDatabase({
name: this.dbName,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
},
// 數(shù)據(jù)庫(kù)建表 sql:'CREATE TABLE IF NOT EXISTS dbTable("id" varchar(50),"name" TEXT)
// 創(chuàng)建 CREATE TABLE IF NOT EXISTS 、 dbTable 是表名,不能用數(shù)字開(kāi)頭、括號(hào)里是表格的表頭
createTable(dbTable, data) {
return new Promise((resolve, reject) => {
// executeSql: 執(zhí)行增刪改等操作的SQL語(yǔ)句
plus.sqlite.executeSql({
name: this.dbName,
sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
},
// 數(shù)據(jù)庫(kù)刪表 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) {
// 判斷有沒(méi)有傳參
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ù)更新、無(wú)數(shù)據(jù)插入
// (建表時(shí)需要設(shè)置主鍵) 例如 --- "roomid" varchar(50) PRIMARY KEY
insertOrReplaceData(dbTable, data, condition) {
// 判斷有沒(méi)有傳參
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ù)庫(kù)里的數(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ù)是列表名,用來(lái)檢索
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語(yǔ)句
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ù)開(kāi)始拿
// LIMIT 15 OFFSET '${num}',這句的意思是跳過(guò) num 條拿 15 條數(shù)據(jù), num 為跳過(guò)多少條數(shù)據(jù)是動(dòng)態(tài)值
// 例 初始num設(shè)為0,就從最后的數(shù)據(jù)開(kāi)始拿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);
}
})
})
}
在頁(yè)面 import 引入 sqlite.js
// 引入
import DB from "@/common/sqlite.js";
// 查詢數(shù)據(jù)庫(kù)是否打開(kāi)
DB.isOpen()
// 創(chuàng)建/開(kāi)啟數(shù)據(jù)庫(kù)
DB.openSqlite()
// 關(guān)閉數(shù)據(jù)庫(kù)
DB.closeSqlite()
// 數(shù)據(jù)庫(kù)建表
DB.createTable()
// 數(shù)據(jù)庫(kù)刪表
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()