- 打开App
- 打开数据库
- 用select语句随便查询一条数据,可以查询成功
- 用insert语句随便插入一条数据,可以插入成功
- 随便改一点uniapp的代码,等待代码热更新到手机并等待App重启
- 重启成功后打开数据库
- 用select语句随便查询一条数据,可以查询成功
- 用insert语句随便插入一条数据,插入报错,错误内容Attempt to write a readonly database
- 发布:2021-12-20 19:50
- 更新:2024-05-18 09:23
- 阅读:2316
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 11.6
HBuilderX类型: 正式
HBuilderX版本号: 3.2.16
手机系统: iOS
手机系统版本号: iOS 13.2
手机厂商: 苹果
手机机型: iPhone 6S
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
在代码热刷新后可以正常的insert或者update
在代码热刷新后可以正常的insert或者update
实际结果:
在代码热刷新后在insert或者update时提示Attempt to write a readonly database,但db文件是创建在_doc目录下的。
在代码热刷新后在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) {}
})
g***@tocs.cn (作者) - shonve
临时解决方案: 每次open db后测试一下insert一条数据,如果报错则先close db,然后open db就没有问题了。这是bug还是我的姿势不对?
热更新之前的数据库会关闭,重新open就可以了
-
g***@tocs.cn (作者)
每次App打开的时候都会主动去打开数据库的,如果没有开启就会开启再进行接下来的操作。关键是打开后可以查询,但是update和insert就会有问题。从目前的测试来看,热更新之前数据库并没有被关闭,在热更新之后去检查状态是开启的,这种情况下可以查询,但不能update和insert。
2021-12-21 22:35
-
回复 g***@tocs.cn: 现在有好的处理方法没?我也遇到了相同的问题,之前版本的HBuildx是没有问题的 更新了版本后就有这个问题了,小改点东西 程序必须重启才能不报错。
2021-12-27 15:15
-
回复 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
随风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))
}
})