__sqlite.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. /*
  2. * @Descripttion: sqlite 方法集合
  3. * @version: 1.0
  4. * 已弃用
  5. */
  6. /**
  7. * 数据库初始化
  8. * @dbName 数据库名
  9. * @version 数据库版本
  10. **/
  11. async function initDB(dbName, version) {
  12. let sqlversion = 9; // 数据库版本,只要对不上就进行更新每次需要更新数据库都要重设此字段
  13. if (sqlversion == version) {
  14. console.log("无需更新");
  15. let recode = {
  16. "version": sqlversion
  17. };
  18. return recode;
  19. }
  20. //需要进行更新的数据语句依次从后加入 sqlite不能执行set 操作,只能add
  21. let sqldata = [{
  22. "sql": 'create table if not exists sqldo(id INTEGER PRIMARY KEY AUTOINCREMENT,num INT NOT NULL DEFAULT 0--执行数据语句号num\n); --数据库更新版本库\n',
  23. "num": '1'
  24. },
  25. {
  26. "sql": 'create table if not exists bills(id INTEGER PRIMARY KEY AUTOINCREMENT,remarks TEXT,time VARCHAR(80) NOT NULL,amount FLOAT NOT NULL,classifi VARCHAR(80) NOT NULL,btype TINYINT NOT NULL,uid INT NOT NULL); --账单表\n',
  27. "num": '2'
  28. },
  29. {
  30. "sql": 'create table if not exists plans(id INTEGER PRIMARY KEY AUTOINCREMENT,remarks TEXT, --备注\n time VARCHAR(80) NOT NULL, --完成时间\n title TEXT, --名称\n classifi VARCHAR(80) NOT NULL, --分类\n btype TINYINT NOT NULL, --大类别0临时1常规\n uid INT NOT NULL --用户id\n); --计划备忘录\n',
  31. "num": '3'
  32. },
  33. //{"sql":'insert into sqldo (num) values (4); --完成状态-1未完成1已经完成\n',"num":'4'},
  34. {
  35. "sql": 'ALTER TABLE plans ADD COLUMN amount TINYINT DEFAULT -1; --完成状态-1未完成1已经完成\n',
  36. "num": '4'
  37. }, //计划表更新字段
  38. {
  39. "sql": 'ALTER TABLE plans ADD COLUMN endtime VARCHAR(80) DEFAULT 0; --结束时间\n',
  40. "num": '5'
  41. },
  42. {
  43. "sql": 'ALTER TABLE plans ADD COLUMN donum TINYINT DEFAULT 0; --完成度0~100\n',
  44. "num": '6'
  45. },
  46. {
  47. "sql": 'ALTER TABLE plans ADD COLUMN deletetime VARCHAR(80) DEFAULT 0; --删除时间0就是未删除\n',
  48. "num": '7'
  49. },
  50. {
  51. "sql": 'ALTER TABLE bills ADD COLUMN deletetime VARCHAR(80) DEFAULT 0; --删除时间0就是未删除\n',
  52. "num": '8'
  53. },
  54. ];
  55. //查询数据库版本表是否存在,如果不存在就全部更新
  56. let istable = await queryIsTableinit(databaseName, "sqldo");
  57. if (istable) { //先进行判断需要执行哪些语句
  58. //查询数据库更新的版本
  59. let setDatasql = 'select * from sqldo;';
  60. let sedatalist = await selectDataListsqlonly(databaseName, setDatasql);
  61. sedatalist.forEach((item, index) => { //从数据中循环读取,再进行比对,如果没有的就进行执行语句,并添加到数据库
  62. sqldata.forEach((items, indexs) => {
  63. if (item.num == items.num) {
  64. sqldata.splice(indexs, 1);
  65. }
  66. });
  67. });
  68. if (sqldata.length == 0) { //空数据没有执行语句
  69. console.log("判断完毕,无需更新");
  70. let recode = {
  71. "code": sqlsqlcode,
  72. "version": sqlversion
  73. };
  74. return recode;
  75. }
  76. }
  77. //开始执行sql语句
  78. for (var i = 0; i < sqldata.length; i++) {
  79. let sqlone = sqldata[i].sql;
  80. let obj = {
  81. "num": sqldata[i].num
  82. };
  83. let sqlcode = await queryDBsqloney(databaseName, sqlone);
  84. if (sqlcode == 100) { //成功执行添加操作
  85. let addcode = await addSaveData(databaseName, "sqldo", obj);
  86. if (addcode == 200) {
  87. sqlsqlcode = 200;
  88. }
  89. }
  90. }
  91. let recode = {
  92. "code": sqlsqlcode,
  93. "version": sqlversion
  94. };
  95. return recode;
  96. /*
  97. let sql=[
  98. 'create table if not exists bills(id INTEGER PRIMARY KEY AUTOINCREMENT,remarks TEXT,time VARCHAR(80) NOT NULL,amount FLOAT NOT NULL,classifi VARCHAR(80) NOT NULL,btype TINYINT NOT NULL,uid INT NOT NULL); --账单表\n',//账单
  99. 'create table if not exists plans(id INTEGER PRIMARY KEY AUTOINCREMENT,remarks TEXT, --备注\n time VARCHAR(80) NOT NULL, --完成时间\n title TEXT, --名称\n classifi VARCHAR(80) NOT NULL, --分类\n btype TINYINT NOT NULL, --大类别0临时1常规\n uid INT NOT NULL --用户id\n); --计划备忘录\n',
  100. 'ALTER TABLE plans ADD COLUMN amount TINYINT DEFAULT -1; --完成状态-1未完成1已经完成\n',
  101. 'ALTER TABLE plans ADD COLUMN endtime VARCHAR(80) DEFAULT 0; --结束时间\n',
  102. 'ALTER TABLE plans ADD COLUMN donum TINYINT DEFAULT 0; --完成度0~100\n'
  103. ];
  104. openDBinit(databaseName);
  105. plus.sqlite.executeSql({
  106. name: databaseName,
  107. sql: sql,
  108. // sql:['DROP TABLE plans;','DROP TABLE plansss;','DROP TABLE planssss;'],//删除表
  109. success: function(e){
  110. console.log('executeSql2222 success!');
  111. },
  112. fail: function(e){
  113. console.log('executeSql failed: '+JSON.stringify(e));
  114. }
  115. });
  116. */
  117. }
  118. // 创建表
  119. function createTable(dbName, tableName, tableStructure) {
  120. // 注意:tableName不能用数字作为表格名的开头
  121. return new Promise((resolve, reject) => {
  122. plus.sqlite.executeSql({
  123. name: dbName,
  124. // sql: 'create table if not exists dataList("list" INTEGER PRIMARY KEY AUTOINCREMENT,"id" TEXT,"name" TEXT,"gender" TEXT,"avatar" TEXT)',
  125. sql: `create table if not exists ${tableName}(${tableStructure})`,
  126. success(e) {
  127. resolve(e);
  128. },
  129. fail(e) {
  130. console.log(e)
  131. reject(e);
  132. }
  133. })
  134. })
  135. }
  136. // 查询表是否存在
  137. function isTableExist(dbName, tableName) {
  138. return new Promise((resolve, reject) => {
  139. plus.sqlite.selectSql({
  140. name: dbName,
  141. sql: `select count(*) as isTable FROM sqlite_master where type='table' and name='${tableName}'`,
  142. success(e) {
  143. resolve(e[0].isTable ? true : false);
  144. },
  145. fail(e) {
  146. console.log(e)
  147. reject(e);
  148. }
  149. })
  150. })
  151. }
  152. // 判断数据库是否打开
  153. function isOpenDB(dbName) {
  154. let dbPath = `_doc/${dbName}_record.db`;
  155. //数据库打开了就返回true,否则返回false
  156. let isopen = plus.sqlite.isOpenDatabase({
  157. name: dbName,
  158. path: dbPath
  159. })
  160. return isopen
  161. }
  162. // 创建数据库/打开数据库
  163. function openDB(dbName) {
  164. return new Promise((resolve, reject) => {
  165. plus.sqlite.openDatabase({
  166. name: dbName || 'testData',
  167. path: `_doc/${dbName}_record.db`,
  168. success: function() {
  169. resolve('openDatabase success!')
  170. },
  171. fail: function(e) {
  172. reject('openDatabase failed: ' + JSON.stringify(e))
  173. }
  174. });
  175. })
  176. }
  177. // 查询所有数据库表名
  178. function getDbTables(dbName) {
  179. return new Promise((resolve, reject) => {
  180. plus.sqlite.selectSql({
  181. name: dbName,
  182. sql: "select * FROM sqlite_master where type='table'",
  183. success(e) {
  184. console.log(e)
  185. resolve(e);
  186. },
  187. fail(e) {
  188. console.log(e)
  189. reject(e);
  190. }
  191. })
  192. })
  193. }
  194. // 添加数据
  195. function insertData(dbName, tableName, obj) {
  196. if (obj) {
  197. let keys = Object.keys(obj)
  198. let keyStr = keys.toString()
  199. let valStr = ''
  200. keys.forEach((item, index) => {
  201. if (keys.length - 1 == index) {
  202. valStr += ('"' + obj[item] + '"')
  203. } else {
  204. valStr += ('"' + obj[item] + '",')
  205. }
  206. })
  207. // console.log(valStr)
  208. let sqlStr = `insert into ${tableName}(${keyStr}) values(${valStr})`
  209. // console.log(sqlStr)
  210. return new Promise((resolve, reject) => {
  211. plus.sqlite.executeSql({
  212. name: dbName,
  213. sql: sqlStr,
  214. success(e) {
  215. console.log(e);
  216. resolve(100);
  217. },
  218. fail(e) {
  219. console.log(e)
  220. reject(e);
  221. }
  222. })
  223. })
  224. } else {
  225. return new Promise((resolve, reject) => {
  226. reject("错误")
  227. })
  228. }
  229. }
  230. /*
  231. ** 执行查询的SQL语句
  232. */
  233. function selectSql(dbName, sql) {
  234. return new Promise((resolve, reject) => {
  235. plus.sqlite.selectSql({
  236. name: dbName,
  237. sql: sql,
  238. success(e) {
  239. console.log(e)
  240. resolve(e);
  241. },
  242. fail(e) {
  243. console.log(e)
  244. reject(e);
  245. }
  246. })
  247. })
  248. }
  249. /*
  250. ** 执行增删改等操作的SQL语句
  251. */
  252. function executeSql(dbName, sql) {
  253. return new Promise((resolve, reject) => {
  254. plus.sqlite.executeSql({
  255. name: dbName,
  256. sql: sql,
  257. success(e) {
  258. console.log(e)
  259. resolve(e);
  260. },
  261. fail(e) {
  262. console.log(e)
  263. reject(e);
  264. }
  265. })
  266. })
  267. }
  268. /*
  269. ** 执行事务
  270. * @param {string} dbName operation
  271. * @param {string} operation 需要执行的事务操作 可选值:begin(开始事务)、commit(提交)、rollback(回滚)
  272. */
  273. function transaction(dbName, operation) {
  274. return new Promise((resolve, reject) => {
  275. plus.sqlite.transaction({
  276. name: dbName,
  277. operation: operation,
  278. success(e) {
  279. console.log(e)
  280. resolve(e);
  281. },
  282. fail(e) {
  283. console.log(e)
  284. reject(e);
  285. }
  286. })
  287. })
  288. }
  289. // 获取数据库分页数据
  290. /**
  291. *
  292. * @param {*} dbName
  293. * @param {*} tableName
  294. * @param {*} num 页码
  295. * @param {*} size 页面大小返回条数
  296. * @param {*} byName 排序主键字段
  297. * @param {*} byType 排序类型 desc倒序 / asc正序
  298. */
  299. async function queryDataPageList(dbName, tableName, num, size, byName, byType) {
  300. let count = 0
  301. let sql = ''
  302. let numindex = 0
  303. await queryCount(dbName, tableName).then((resNum) => {
  304. count = Math.ceil(resNum[0].num / size)
  305. })
  306. if (((num - 1) * size) == 0) {
  307. numindex = 0
  308. } else {
  309. numindex = ((num - 1) * size) + 1
  310. }
  311. sql = `select * from ${tableName}`
  312. if (byName && byType) {
  313. // desc asc
  314. sql += ` order by ${byName} ${byType}`
  315. }
  316. sql += ` limit ${numindex},${size}`
  317. if (count < num - 1) {
  318. return new Promise((resolve, reject) => {
  319. reject("无数据")
  320. });
  321. } else {
  322. return new Promise((resolve, reject) => {
  323. plus.sqlite.selectSql({
  324. name: dbName,
  325. // sql: "select * from userInfo limit 3 offset 3",
  326. sql: sql,
  327. success(e) {
  328. resolve(e);
  329. },
  330. fail(e) {
  331. reject(e);
  332. }
  333. })
  334. })
  335. }
  336. }
  337. // 查询表数据总条数
  338. function queryCount(dbName, tableName) {
  339. return new Promise((resolve, reject) => {
  340. plus.sqlite.selectSql({
  341. name: dbName,
  342. sql: "select count(*) as num from " + tableName,
  343. success(e) {
  344. resolve(e);
  345. },
  346. fail(e) {
  347. reject(e);
  348. }
  349. })
  350. })
  351. }
  352. // 修改(更新)数据
  353. // 示例:UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
  354. // UPDATE 表名 SET 要修改字段 = '修改内容' WHERE 筛选条件 = 6;
  355. /**
  356. *
  357. * @param {*} dbName 数据库名
  358. * @param {*} tableName 表名
  359. * @param {*} setData 设置值 (修改字段 + 修改内容)
  360. * @param {*} setName 筛选条件
  361. * @param {*} setVal 筛选值
  362. * @returns
  363. */
  364. function updateSqlData(dbName, tableName, setData, setName, setVal) {
  365. if (JSON.stringify(setData) !== '{}') {
  366. let dataKeys = Object.keys(setData)
  367. let setStr = ''
  368. dataKeys.forEach((item, index) => {
  369. // console.log(item, setData[item])
  370. setStr += (
  371. `${item} = ${JSON.stringify(setData[item])}${dataKeys.length - 1 !== index ? "," : ""}`)
  372. })
  373. console.log(setStr)
  374. return new Promise((resolve, reject) => {
  375. plus.sqlite.executeSql({
  376. name: dbName,
  377. sql: `update ${tableName} set ${setStr} where ${setName} = "${setVal}"`,
  378. success(e) {
  379. //resolve(e);
  380. resolve(100);
  381. },
  382. fail(e) {
  383. console.log(e)
  384. reject(e);
  385. }
  386. })
  387. })
  388. } else {
  389. return new Promise((resolve, reject) => {
  390. reject("错误")
  391. });
  392. }
  393. }
  394. // 关闭数据库
  395. function closeDB(dbName) {
  396. return new Promise((resolve, reject) => {
  397. plus.sqlite.closeDatabase({
  398. name: dbName,
  399. success: function(e) {
  400. resolve('closeDatabase success!');
  401. },
  402. fail: function(e) {
  403. reject('closeDatabase failed: ' + JSON.stringify(e));
  404. }
  405. });
  406. })
  407. }