追梦随想
追梦随想
  • 发布:2019-04-05 22:53
  • 更新:2019-04-10 15:22
  • 阅读:2394

SqlLite 功能太过于简单了,能否增加一个判断数据库状态(打开/关闭)

分类:5+ SDK

SqlLite 功能太过于简单了,只有最基本的功能,使用的时候需要重新封装。
由于数据库用完就必须关闭,否则下一次根本打不开,但是会出现一个蛋疼的情况,多个地方处理数据库的时候,前面的还没关闭,后面的就准备打开,就会提示 "Same Name Already Open" 的错误,然后就没法执行下去了,如果是同一个功能还好说,前面执行成功后在执行下一个,就不会出现问题。
但是有时候不得不分开做,就会出现前面的还没关闭,后面的就要打开,如果有办法获取数据库打开状态,那么这个问题就好处理了,做个判断就搞定,但是在网上找了好久,都没发现有办法判断数据库打开状态,官方能不能办法做一个接口?

2019-04-05 22:53 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com - wqertr

是啊 打算使用indexedDB基于对象的存储 uni好像不支持,如果使用setStorage, 频繁的全部取出处理再全部写入感觉效率低。用这个吧,重复打开数据库报错不说,也没有看到建表的语法,还有自增主键不知道怎么弄,

1***@qq.com

1***@qq.com - wqertr

是啊 打算使用indexedDB基于对象的存储 uni好像不支持,如果使用setStorage, 频繁的全部取出处理再全部写入感觉效率低。用这个吧,重复打开数据库报错不说,也没有看到建表的语法,还有自增主键不知道怎么弄,

  • 追梦随想 (作者)

    建表的语法跟MySql一样,挺简单,唯独频繁打开关闭数据库比较鸡肋,而且还没办法判断是否打开了。本地存储小数据还可以,大数据只能用数据库来

    2019-04-06 19:17

DCloud_App_Array

DCloud_App_Array

我们会尽快补充此接口。

  • MonikaChen

    plus.sqlite.isOpenDatabase,你说的是这个吧

    2021-02-05 21:49

前海万联

前海万联 - !WanlShop

自从看了你这个,不会了,是我思路有问题???? 本来在项目公共又封装了下, 开启数据库 通过其他储存字段 为1 关闭为0 增删改查查询判断状态

var appDB = {  
    open: function(DBname) {  
        plus.sqlite.openDatabase({  
            name: DBname,  
            path: '_doc/' + md56(DBname) + '/' +DBname +'.db',  
            success: function(e){  
                plus.storage.setItem(DBname,"1"); //记录状态  
                log('打开数据库成功 ' + JSON.stringify(e))  
                return e;  
            },  
            fail: function(e){  
                log('数据库异常 ' + JSON.stringify(e));  
                mui.toast(e);  
            }  
        });  
    }  
......
  • 追梦随想 (作者)

    单页面操作很好做,如果是多页面同时操作数据库呢?你告诉我要不要关闭数据库这一步?如果关闭了,js执行速度很快的,就会造成其他页面没法操作了。

    2019-04-10 15:28

  • 前海万联

    回复 追梦随想: 我懂了,是跟我当前项目完全没关系, 完全不用记录状态

    2019-04-10 15:36

  • 1***@163.com

    回复 追梦随想:在一个js中封装了对数据库的操作,但是在多个页面调用增删改查,android部分动不动就code":-1404,"message":"android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode,,永远打不开了,你是怎么在不同的界面调用的。。

    2019-05-23 14:44

  • 追梦随想 (作者)

    回复 1***@163.com: 简单啊,不关闭就行了,哈哈哈,我就是这么做的,打开app就打开数据库,不再关闭,你这个提示好像是数据库的进程被锁定,一次只允许一个地方操作数据库

    2019-05-23 15:02

  • 1***@163.com

    回复 追梦随想: 哦哦。谢谢回复,不同表插入较多条数据,用到了事务,不然会影响效率,那怎么确保一次只一个地方呢,我这边不关闭ios报问题,关闭android这一块特备容易锁死,,

    2019-05-23 15:14

  • 追梦随想 (作者)

    回复 1***@163.com: 有事务操作就会锁定进程,那就用先后顺序执行吧,A页面执行完毕用evalJS调用B页面对应的执行函数

    2019-05-23 15:19

  • 1***@163.com

    回复 追梦随想: 谢谢,可能需求一样,我再想想其他方法。。

    2019-05-23 15:26

该问题目前已经被锁定, 无法添加新回复