g***@tocs.cn
g***@tocs.cn
  • 发布:2021-12-20 19:50
  • 更新:2023-12-11 16:49
  • 阅读:1663

【报Bug】uniapp在sqlite相关开发过程中,热更新代码后无法update与insert,提示readonly database

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 11.6

HBuilderX类型: 正式

HBuilderX版本号: 3.2.16

手机系统: iOS

手机系统版本号: iOS 13.2

手机厂商: 苹果

手机机型: iPhone 6S

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:
  1. 打开App
  2. 打开数据库
  3. 用select语句随便查询一条数据,可以查询成功
  4. 用insert语句随便插入一条数据,可以插入成功
  5. 随便改一点uniapp的代码,等待代码热更新到手机并等待App重启
  6. 重启成功后打开数据库
  7. 用select语句随便查询一条数据,可以查询成功
  8. 用insert语句随便插入一条数据,插入报错,错误内容Attempt to write a readonly database

预期结果:

在代码热刷新后可以正常的insert或者update

实际结果:

在代码热刷新后在insert或者update时提示Attempt to write a readonly database,但db文件是创建在_doc目录下的。

bug描述:

在开发过程中经过热刷新代码后,update与insert的操作就会一直提示Attempt to write a readonly database. Cannot create file private directory,在后台彻底关闭App并再重新打开后就可以update与insert的操作。但不管有没有经过热刷新,打开数据与查询等操作都是可以的。

数据库是创建在_doc目录下
plus.sqlite.openDatabase({
name: _this.dbName, //数据库名称
path: _doc/${_this.dbName}.db, //数据库地址
success(e) { 数据库开启后的相关操作 },
fail(e) {}
})

insert操作:
plus.sqlite.executeSql({
name: _this.dbName,
sql: sqlStr,
success(e) {},
fail(e) {}
})

2021-12-20 19:50 负责人:DCloud_iOS_WZT 分享
已邀请:
g***@tocs.cn

g***@tocs.cn (作者) - shonve

求官方看看这个问题

g***@tocs.cn

g***@tocs.cn (作者) - shonve

临时解决方案: 每次open db后测试一下insert一条数据,如果报错则先close db,然后open db就没有问题了。这是bug还是我的姿势不对?

  • DCloud_iOS_WZT

    插入前用isOpenDatabase 判断下数据库是否打开

    2021-12-21 17:40

DCloud_iOS_WZT

DCloud_iOS_WZT

热更新之前的数据库会关闭,重新open就可以了

  • g***@tocs.cn (作者)

    每次App打开的时候都会主动去打开数据库的,如果没有开启就会开启再进行接下来的操作。关键是打开后可以查询,但是update和insert就会有问题。从目前的测试来看,热更新之前数据库并没有被关闭,在热更新之后去检查状态是开启的,这种情况下可以查询,但不能update和insert。

    2021-12-21 22:35

  • DCloud_iOS_WZT

    回复 g***@tocs.cn: 你是怎么检测状态是开启的。在你的代码里没有看到

    2021-12-22 11:02

  • DCloud_iOS_WZT

    回复 g***@tocs.cn: 每次app打开开启的逻辑在哪里 你上传一个完整的示例吧

    2021-12-22 11:03

  • 1***@qq.com

    回复 g***@tocs.cn: 现在有好的处理方法没?我也遇到了相同的问题,之前版本的HBuildx是没有问题的 更新了版本后就有这个问题了,小改点东西 程序必须重启才能不报错。

    2021-12-27 15:15

  • DCloud_iOS_WZT

    回复 1***@qq.com: 热更新后要重新open

    2021-12-27 16:04

  • 1***@163.com

    回复 DCloud_iOS_WZT: ios上调试的时候 delete的时候也是报错:code":-1404,"message":"Error:Attempt to write a readonly database. Cannot create file private directory,such as:'www'.检查了数据库状态 是打开的。重新打开的时候 报错1401 提示 数据库已打开。

    2022-05-23 20:15

appwociao

appwociao

碰到同样问题

r***@qq.com

r***@qq.com

碰到同样问题

DCloud_iOS_WZT

DCloud_iOS_WZT

3.5.3已修复

随风l

随风l - 爱弟前端

使用发现 错误:{"code":-1404,"message":"android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (Sqlite code 8 SQLITE_READONLY), (OS error - 2:No such file or directory)
下面是写法:
plus.sqlite.executeSql({
name: 'main',
sql: INSERT INTO bs_xuewei VALUES (2989, 0, '0', '其他', '', 0, 1, '无学位', 1, 1, 0, 0);,
success(res) {
console.log('成功:'+ res)
},
fail(err) {
console.log('错误:'+ JSON.stringify(err))
}
})

  • 随风l

    使用的是安卓,机型为:huawei matepad air ,harmonyOs4.0.0版本

    2023-12-11 16:52

要回复问题请先登录注册