SQLite 数据库是一种通用数据库,适用于各种应用程序,包括移动应用,桌面应用,嵌入式系统等,它支持sql标准,因此可以执行常见的sql操作,如插入,查询,更新,和删除数据。SQLite 通常用于小到中等规模的应用,因为他是嵌入书数据库,不需要单独的数据库服务器,而是将数据库存储在应用程序的文件中。这使的他在许多场景下都非常有用。 在uniapp中已经集成了SQLite,我们只需进行二次封装就可以了。学习网址www.runoob.com/sqlite/sqli…
1.首先在manifest.json文件中勾选SQLite(数据库)
2.在根目录下创建js_sdk文件夹,创建JS文件,在文件中对操作数据库的方法进行二次封装。
// 监听数据库是否打开
function isOpenDB(name) {
let dbName = name;
let dbPath = `_doc/${name}_record.db`;
//数据库打开了就返回true,否则返回false
let isopen = plus.sqlite.isOpenDatabase({
name: dbName,
path: dbPath
})
return isopen
}
// 创建数据库/打开数据库
function openDB(name) {
return new Promise((resolve, reject) => {
plus.sqlite.openDatabase({
name: name || 'testData',
path: `_doc/${name}_record.db`,
success: function (e) {
resolve('openDatabase success!')
},
fail: function (e) {
reject('openDatabase failed: ' + JSON.stringify(e))
}
});
})
}
// 查询所有数据库表名
function queryDBTable(name) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
sql: "select * FROM sqlite_master where type='table'",
success(e) {
resolve(e);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
}
// 创建表
function createTable(name, tabName, tableStructure) {
// 注意:tabName不能用数字作为表格名的开头
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: name,
// sql: 'create table if not exists dataList("list" INTEGER PRIMARY KEY AUTOINCREMENT,"id" TEXT,"name" TEXT,"gender" TEXT,"avatar" TEXT)',
sql: `create table if not exists ${tabName}(${tableStructure})`,
success(e) {
resolve(e);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
}
// 查询表是否存在
function isTable(name, tabName) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
sql: `select count(*) as isTable FROM sqlite_master where type='table' and name='${tabName}'`,
success(e) {
resolve(e[0].isTable ? true : false);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
}
// 添加数据
function addSaveData(name, tabName, obj) {
if (obj) {
let keys = Object.keys(obj)
let keyStr = keys.toString()
let valStr = ''
keys.forEach((item, index) => {
if (keys.length - 1 == index) {
valStr += ('"' + obj[item] + '"')
} else {
valStr += ('"' + obj[item] + '",')
}
})
// console.log(valStr)
let sqlStr = `insert into ${tabName}(${keyStr}) values(${valStr})`
// console.log(sqlStr)
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: name,
sql: sqlStr,
success(e) {
resolve(e);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
} else {
return new Promise((resolve, reject) => {
reject("错误")
})
}
}
// 查询数据库数据
function selectDataList(name, tabName, setData, byName, byType) {
let setStr = ''
let sql = ''
if (JSON.stringify(setData) !== '{}') {
let dataKeys = Object.keys(setData)
dataKeys.forEach((item, index) => {
console.log(setData[item])
setStr += (
`${item}=${JSON.stringify(setData[item])}${dataKeys.length - 1 !== index ? " and " : ""}`)
})
sql = `select * from ${tabName} where ${setStr}`
} else {
sql = `select * from ${tabName}`
}
if (byName && byType) {
// desc asc
sql += ` order by ${byName} ${byType}`
}
console.log(sql)
if (tabName !== undefined) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
} else {
return new Promise((resolve, reject) => {
reject("错误")
});
}
}
// 获取数据库分页数据
/**
*
* @param {*} name
* @param {*} tabName
* @param {*} num 页码
* @param {*} size 页面大小返回条数
* @param {*} byName 排序主键字段
* @param {*} byType 排序类型 desc倒序 / asc正序
*/
async function queryDataList(name, tabName, num, size, byName, byType) {
let count = 0
let sql = ''
let numindex = 0
await queryCount(name, tabName).then((resNum) => {
count = Math.ceil(resNum[0].num / size)
})
if (((num - 1) * size) == 0) {
numindex = 0
} else {
numindex = ((num - 1) * size) + 1
}
sql = `select * from ${tabName}`
if (byName && byType) {
// desc asc
sql += ` order by ${byName} ${byType}`
}
sql += ` limit ${numindex},${size}`
if (count < num - 1) {
return new Promise((resolve, reject) => {
reject("无数据")
});
} else {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
// sql: "select * from userInfo limit 3 offset 3",
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
}
}
// 查询表数据总条数
function queryCount(name, tabName) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
sql: "select count(*) as num from " + tabName,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
}
// 修改(更新)数据
// 示例:UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
// UPDATE 表名 SET 要修改字段 = '修改内容' WHERE 筛选条件 = 6;
/**
*
* @param {*} name 数据库名
* @param {*} tabName 表名
* @param {*} setData 设置值 (修改字段 + 修改内容)
* @param {*} setName 筛选条件
* @param {*} setVal 筛选值
* @returns
*/
function updateSqlData(name, tabName, setData, setName, setVal) {
if (JSON.stringify(setData) !== '{}') {
let dataKeys = Object.keys(setData)
let setStr = ''
dataKeys.forEach((item, index) => {
// console.log(item, setData[item])
setStr += (
`${item} = ${JSON.stringify(setData[item])}${dataKeys.length - 1 !== index ? "," : ""}`)
})
console.log(setStr)
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: name,
sql: `update ${tabName} set ${setStr} where ${setName} = "${setVal}"`,
success(e) {
resolve(e);
},
fail(e) {
console.log(e)
reject(e);
}
})
})
} else {
return new Promise((resolve, reject) => {
reject("错误")
});
}
}
// 关闭数据库
function closeDB(name) {
return new Promise((resolve, reject) => {
plus.sqlite.closeDatabase({
name: name,
success: function(e) {
resolve('closeDatabase success!');
},
fail: function(e) {
reject('closeDatabase failed: ' + JSON.stringify(e));
}
});
})
}
在页面中调用
<template>
<view class="content">
<!-- SQLite数据库 测试 -->
<view class="db-test">
<button @click="checkDBstatus">检查数据库状态</button>
<button @click="openDB">打开数据库</button>
<button @click="closeDB">关闭数据库</button>
<button @click="createTable">创建caps_record表</button>
<!-- <button @click="createPersonnelTable">创建人员信息表</button> -->
<button @click="queryDBTable">查询数据库所有的表</button>
<button @click="isTable">查询表是否存在</button>
<button @click="addSave">存储数据</button>
<!-- <button @click="addPersonneSave">存储人员信息数据</button> -->
<button @click="queryData">查询数据</button>
<!-- <button @click="queryPersonnelData">查询人员信息数据</button> -->
<button @click="updateSqlData">修改更新数据</button>
<button @click="queryCount">查询数据总条数</button>
<button @click="queryDataList">分页获取数据</button>
<button @click="delData">删除数据</button>
</view>
<view class="">
{{ list }}
</view>
<!-- SQLite数据库 -->
</view>
</template>
<script>
import sql from '../../js_sdk/wt-sqlite/sqlite';
export default {
data() {
return {
// 数据库
dataBase: 'knowledgeCaps', // 数据库名
dbTable: 'caps_record', // 数据库表名
dbPerTable: 'per_table',
list: []
};
},
async onLoad() {},
methods: {
// ************************************ sqlite数据库 *************************************
// 检查数据库状态
checkDBstatus() {
uni.showToast({
title: sql.isOpenDB(this.dataBase) ? '数据库已打开' : '数据库已关闭',
icon: 'none'
});
},
// 打开数据库
openDB() {
if (sql.isOpenDB(this.dataBase)) return;
sql.openDB(this.dataBase)
.then((res) => {
console.log(res);
uni.showToast({
title: `数据库打开成功!${res}`,
icon: 'none'
});
})
.catch((err) => {
console.log(err);
});
},
// 关闭数据库
closeDB() {
sql.closeDB(this.dataBase)
.then((res) => {
console.log(res);
uni.showToast({
title: `数据库关闭成功!${res}`,
icon: 'none'
});
})
.catch((err) => {
console.log(err);
});
},
// 创建人员信息表
createPersonnelTable() {
sql.createTable(
this.dataBase,
this.dbPerTable,
`"personnel_id" INTEGER PRIMARY KEY AUTOINCREMENT, "user_name" TEXT, "work_type" TEXT, "user_age" TEXT, "content" TEXT`
).then((res) => {
uni.showToast({
title: `创建人员信息表成功!${res}`,
icon: 'none'
});
console.log(res);
});
},
// 添加人员信息
addPersonneSave() {
sql.addSaveData(this.dataBase, this.dbPerTable, {
user_name: '张三',
work_type: '软件工程师',
user_age: '18',
content: '人员信息'
}).then((res) => {
uni.showToast({
title: `储存人员信息成功!${res}`,
icon: 'none'
});
console.log(res);
});
},
// 查询人员信息数据
queryPersonnelData() {
sql.selectDataList(this.dataBase, this.dbPerTable, {}).then((res) => {
console.log(res);
});
},
// 创建表
createTable() {
sql.createTable(this.dataBase, this.dbTable, `"chat_id" INTEGER PRIMARY KEY AUTOINCREMENT, "feed_type" TEXT, "role_type" TEXT, "user_image" TEXT, "content" TEXT`).then(
(res) => {
console.log(res);
}
);
},
// 查询数据库所有表
queryDBTable() {
sql.queryDBTable(this.dataBase).then((res) => {
console.log(res);
});
},
// 查询表是否存在
isTable() {
sql.isTable(this.dataBase, this.dbTable).then((res) => {
console.log(res);
});
},
// 添加、存储数据
addSave() {
sql.addSaveData(this.dataBase, this.dbTable, {
feed_type: '333',
role_type: '3',
user_image: '',
content: '测试数据hahaha,hello Word!你好 世界!'
}).then(() => {
uni.showToast({
title: `储存数据成功`,
icon: 'none'
});
});
},
// 查询数据
queryData() {
sql.selectDataList(this.dataBase, this.dbTable, {}).then((res) => {
this.list = res;
console.log(res);
});
},
// 修改更新数据
updateSqlData() {
sql.updateSqlData(
this.dataBase,
this.dbTable,
{
feed_type: '333',
content: '这是修改成功的值789!!!嘻嘻嘻哈哈哈'
},
'chat_id',
4
).then((res) => {
console.log(res);
uni.showToast({
title: `修改数据成功`,
icon: 'none'
});
});
},
// 删除数据
delData() {
sql.deleteInformationType(this.dataBase, this.dbTable, {
chat_id: 3
}).then((res) => {
uni.showToast({
title: `删除数据成功`,
icon: 'none'
});
console.log(res);
});
},
// 查询表数据总条数
queryCount() {
sql.queryCount(this.dataBase, this.dbTable).then((res) => {
console.log(res);
uni.showToast({
title: `表数据总数为${res[0].num}`,
icon: 'none'
});
});
},
// 分页获取数据
queryDataList() {
sql.queryDataList(this.dataBase, this.dbTable, 1, 5, 'chat_id', 'desc').then((res) => {
console.log(res);
});
}
}
};
</script>
<style>
.content button {
margin-bottom: 20rpx;
}
.input_box {
width: 690rpx;
height: 80rpx;
font-size: 40rpx;
line-height: 40rpx;
margin: 10rpx auto;
background-color: pink;
}
.table_box {
width: 690rpx;
margin: 10rpx auto;
text-align: center;
}
</style>