uniapp sqlite数据库使用
let sqlite = {
//创建数据库或者有该数据库就打开
openSqlite: function () {
//创建数据库或者打开
//这plus.sqlite只在手机上运行
return new Promise((resolve, reject) => {
console.log("打开数据库");
plus.sqlite.openDatabase({
name: "xj", //数据库名称
path: "_doc/xj.db", //数据库地址,uniapp推荐以下划线为开头,这到底存在哪里去了,我也不清楚,哈哈
success(e) {
resolve(e); //成功回调
},
fail(e) {
reject(e); //失败回调
},
});
});
},
// ---------------------------------------------------创建表----------------------------------------------------------------
//在该数据库里创建表格, 这一步也必须要!
//下面注释里说的都是说sql:'create table if not exists....这里
//userInfo是表格名,你也可以写其他的名,不能用数字作为表格名的开头!!!
//括号里是表格的结构,列,这里我写了四列,list,id,gender,avatar这四列
//list后面大写的英文是自动增加的意思,因为表格里的每一行必须有唯一标识
//这sql语句会数据库的应该都看的懂,我是前端菜鸡,所以详细说明以便跟我一样不懂sql的前端看
//"id" TEXT 意思是这一列放的值为字符串之类的,如果是想存数字之类的就改为INTEGER
//数据库不能存对象,数组
//创建 9、定位表(d_location)
dLocationCreate: function () {
return new Promise((resolve, reject) => {
//创建表格在executeSql方法里写
plus.sqlite.executeSql({
name: "xj",
//表格创建或者打开,后面为表格结构
sql:
"CREATE TABLE if not exists d_location (\n" +
' "fID" text NOT NULL,\n' +
' "fTaskCode" text,\n' +
' "fLongitude" text,\n' +
' "fLatitude" text,\n' +
' "fExecTime" text,\n' +
' "fDeviceNo" text,\n' +
' "fInspector" text,\n' +
' "fPhoneFactory" text,\n' +
' "fPhoneModel" text,\n' +
' "fVersion" text,\n' +
' "fPhoneVersion" text,\n' +
' PRIMARY KEY ("fID")\n' +
");",
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
},
// ---------------------------------------------------插入数据-----------------------------------------------------------------
//向表格里添加数据
//根据表格的列来添加信息
//因为list列我设为自动增加,所以不用添加数据
//values里是传过来要存的值,我这里是动态的,单引号加双引号拼接
addDLocation: function (dataList) {
//判断有没有传参
if (dataList) {
//判断传的参是否有值
let b = JSON.stringify(dataList) === "[]";
if (!b) {
// 传过来的list循环遍历插入表中
for (let item of dataList) {
//obj传来的参数对象
let fID = item.fID; // 主键(uuid)
let fTaskCode = item.fTaskCode || ""; // 任务id
let fLongitude = item.fLongitude || ""; // 经度
let fLatitude = item.fLatitude || ""; // 维度
let fExecTime = item.fExecTime || ""; // 执行时间(当前时间)
let fDeviceNo = item.fDeviceNo || ""; // 设备id(手机的唯一标识符)
let fInspector = item.fInspector || ""; // 操作人(可以为空)
let fPhoneFactory = item.fPhoneFactory || ""; // 手机厂商(可以为空)
let fPhoneModel = item.fPhoneModel || ""; // 手机型号(可以为空)
let fVersion = item.fVersion || ""; // 软件版本(可以为空)
let fPhoneVersion = item.fPhoneVersion || ""; // 手机系统版本(可以为空)
plus.sqlite.executeSql({
name: "xj",
sql:
"insert into d_location(fID,fTaskCode,fLongitude,fLatitude,fExecTime,fDeviceNo,fInspector,fPhoneFactory,fPhoneModel,fVersion,fPhoneVersion) " +
'values("' +
fID +
'","' +
fTaskCode +
'","' +
fLongitude +
'","' +
fLatitude +
'","' +
fExecTime +
'","' +
fDeviceNo +
'","' +
fInspector +
'","' +
fPhoneFactory +
'","' +
fPhoneModel +
'","' +
fVersion +
'","' +
fPhoneVersion +
'")',
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
}
return new Promise((resolve, reject) => {
reject("成功添加");
});
} else {
return new Promise((resolve, reject) => {
reject("错误添加");
});
}
} else {
return new Promise((resolve, reject) => {
reject("错误添加");
});
}
},
/*查询定位信息*/
selectLocationAddTaskCode: function (
tableName,
column1,
value1,
column2,
value2
) {
if (tableName) {
var sql = "";
//两个参数是列表名,用来检索
if (column1 && column2 && value1 && value2) {
//两个检索条件
sql =
"select * from " +
tableName +
" where " +
column1 +
'>="' +
value1 +
'" and ' +
column2 +
'<="' +
value2 +
'"';
}
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: "xj",
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
} else {
return new Promise((resolve, reject) => {
reject("错误查询");
});
}
},
// ---------------------------------------------------查询数据-----------------------------------------------------------------
//查询获取数据库里的数据
//根据传过来的值来获取信息,我这里写了可以有两个条件来获取,都是动态的
//第一个参数为表格名,aa,bb分别为列名和列的值 , cc,dd同前面
//传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
selectInformationType: function (name, aa, bb, cc, dd) {
if (name !== undefined) {
//第一个是表单名称,后两个参数是列表名,用来检索
if (aa !== undefined && cc !== undefined) {
//两个检索条件
var sql =
"select * from " +
name +
" where " +
aa +
"=" +
bb +
" and " +
cc +
"=" +
dd +
"";
}
if (aa !== undefined && cc == undefined) {
//一个检索条件
var sql = "select * from " + name + " where " + aa + "=" + bb + "";
}
if (aa == undefined) {
var sql = "select * from " + name + "";
}
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: "xj",
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
} else {
return new Promise((resolve, reject) => {
reject("错误查询");
});
}
},
// ---------------------------------------------------删除数据-----------------------------------------------------------------
//删除数据库里的数据
//参数跟上面查询获取数据一样
//传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
deleteInformationType: function (name, sol, qq, ww, ee) {
if (name !== undefined && sol !== undefined) {
//listId为表名,后面两个是列表名,检索用的
if (ww !== undefined) {
//两个检索条件
var sql =
"delete from " +
name +
" where " +
sol +
'="' +
qq +
'" and ' +
ww +
"=" +
ee +
"";
} else {
//一个检索条件
var sql = "delete from " + name + " where " + sol + '="' + qq + '"';
}
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: "xj",
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
} else {
return new Promise((resolve, reject) => {
reject("错误删除");
});
}
},
// ---------------------------------------------------修改数据-----------------------------------------------------------------
//修改数据表里的数据
//第一个参数为表格名,name为要修改的列名,cont为要修改为什么值,use,sel为搜索条件,分别是列名和列值
//传的参数按1,3,5来传,传一个,传三个,传五个参数,不能只传两个或者四个
modifyInformation: function (listName, name, cont, use, sel) {
//表格名,要修改地方的列名,修改后的内容,修改条件查询,列名,内容
var sql;
if (use == undefined) {
sql = "update " + listName + " set " + name + '="' + cont + '"';
} else {
sql =
"update " +
listName +
" set " +
name +
'="' +
cont +
'" where ' +
use +
'="' +
sel +
'"';
}
//where前面的是要修改的,后面的是条件,选择哪个
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: "xj",
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
},
// ---------------------------------------------------关闭数据库-----------------------------------------------------------------
//关闭数据库
closeSQL: function (name) {
return new Promise((resolve, reject) => {
plus.sqlite.closeDatabase({
name: "xj",
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
},
// ---------------------------------------------------监听数据库是否开启-----------------------------------------------------------------
//监听数据库是否开启
isOpen: function (name, path) {
var ss = name || "xj";
var qq = path || "_doc/xj.db";
//数据库打开了就返回true,否则返回false
var open = plus.sqlite.isOpenDatabase({
name: ss,
path: qq,
});
return open;
},
//一次获取指定数据条数
//不想一次性把数据全拿过来就可以这样写
//id为表格名,desc代表倒序拿数据,正常是从第一条开始拿,倒序就从最后一条也是最新的一条数据开始拿
//limit 15 offset '+num+'',后面这是两个单引号,这句的意思是跳过多少条拿15条数据,num是动态值
//比如你刚开始给num设为0,那就从最后面的数据开始拿15条,你下次肯定不想再拿刚刚获取到的数据,所以可以让num为15,这样就能一步一步的拿完所有的数据
pullSQL: function (id, num) {
//id为表名,num为跳过多少条数据
//根据list来倒序拿数据,跳过num条拿取15条
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: "xj",
sql:
"select * from " +
id +
" order by list desc limit 15 offset " +
num +
"",
success(e) {
resolve(e);
},
fail(e) {
reject(e);
},
});
});
},
};
//把这些方法导出去
export default sqlite;