g***@tocs.cn
g***@tocs.cn
  • 发布:2021-12-20 19:50
  • 更新:2024-05-18 09:23
  • 阅读:2316

【报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

sssKKwater

sssKKwater - 哈哈

解决了吗?

v***@gmail.com

v***@gmail.com

văn minh là sự tiến bộ về vật chấy và tinh thần của xã hội loài người là sự phát triển cao của văn hoá khi xã hội vượt qua thời kì dã man

5***@qq.com

5***@qq.com

是怎么解决的,现在还是有这个问题

要回复问题请先登录注册