onLoad() {
// 初始化数据库
this.sqlListInitialize()
},
methods: {
// 初始化数据库
sqlListInitialize() {
let dbname = this.dbname
plus.sqlite.openDatabase({
name: dbname,
path: _doc/${dbname}.db
,
success: (res) => {
console.log('数据库打开成功')
},
fail: (err) => {
console.log('数据库已打开')
},
});
setTimeout(() => {
let sqlCode =
'create table if not exists t_device ("id" INTEGER PRIMARY KEY AUTOINCREMENT,"deviceId" TEXT,"name" TEXT)'
plus.sqlite.executeSql({
name: dbname,
sql: sqlCode,
success: (res) => {
console.log('初始化成功')
},
fail: (err) => {
console.log(err)
},
});
}, 500)
setTimeout(() => {
let data = [{
deviceId: '12456',
name: 'a1'
}, {
deviceId: '12458',
name: 'a2'
}, {
deviceId: '12459',
name: 'a3'
}]
this.addSaveData('t_device', data)
}, 1500)
setTimeout(() => {
plus.sqlite.selectSql({
name: dbname, // 数据库名称
sql: "select * from t_device",
success(res) {
console.log('查询全部数据' + res.length + '条')
console.log(res)
},
fail(e) {
console.log(e)
},
});
}, 2500)
},
addSaveData(tabName, data) {
data.forEach((item, index) => {
let keys = Object.keys(item);
let keyStr = keys.toString();
let valStr = "";
keys.forEach((item1, index1) => {
if (keys.length - 1 == index1) {
valStr += '"' + item[item1] + '"';
} else {
valStr += '"' + item[item1] + '",';
}
});
let sqlStr = insert into ${tabName}(${keyStr}) values(${valStr})
;
plus.sqlite.executeSql({
name: this.dbname,
sql: sqlStr,
success: (res) => {
console.log("数据添加成功!", res);
},
fail: (err) => {
console.log("数据添加失败!", err);
},
});
});
},
}
- 发布:2023-03-29 09:01
- 更新:2023-05-19 23:53
- 阅读:411
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Windows 11 家庭中文版 22H2
HBuilderX类型: 正式
HBuilderX版本号: 3.7.3
手机系统: iOS
手机系统版本号: iOS 15
手机厂商: 苹果
手机机型: iPhone 7 Plus、iPhone 12
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
见bug描述
见bug描述
预期结果:
ios端数据库数据正常
ios端数据库数据正常
实际结果:
ios端数据库报错并丢失数据
ios端数据库报错并丢失数据
bug描述:
【首页中报的错】
1、进入首页数据库初始化成功后查询数据(正常)
2、然后修改页面js代码(任意js代码)后,热更新正常(查询数据库数据正常)
3、然后点击开发工具的【重新运行】,进入首页后会报"code": -1404, "message": "Error:disk I/O error,https://ask.dcloud.net.cn/article/282"
4、然后在次点击开发工具的【重新运行】,进入首页后报错信息消失,初始化数据库后查询数据库【数据丢失(都是0条数据)】
【内页中不报错直接数据丢失】
1、测试页面是直接进入的(pages中第一个页面就是测试页面),与首页执行相同的代码、相同的操作后
2、测试页面修改js代码(任意js代码)后,热更新正常(查询数据库数据正常)
3、点击开发工具的【重新运行】,进入测试页不报错(没有任何报错信息),但是数据丢失了【数据库是0条数据】
ios目前测试机型 7 plus 和 12,版本号15.7.4 和16.0 均是同样的错误
同样的代码安卓端数据均正常
柴先生 (作者)
大概写了一下demo,这个demo安卓手机中没有问题,ios手机中重新运行会报错误 -1404 ,"Error:disk I/O error,https://ask.dcloud.net.cn/article/282"
2023-03-29 15:46
柴先生 (作者)
每次点击重新运行都会报错
2023-03-29 15:46
DCloud_iOS_WZT
回复 柴先生: demo发给我 可以放到机要附件里
2023-03-29 19:28
柴先生 (作者)
回复 DCloud_iOS_WZT: 已放入附件中,输出都在控制台,
操作步骤存入数据后,修改任意js代码,热更新完毕,重新运行(完毕后再次重新运行)(报错出现几率90%)
2023-03-30 08:41
DCloud_iOS_WZT
回复 柴先生: 我没复现你的问题 但是我这边如果修改代码 保存刷新 调用addSaveData 会报Attempt to write a readonly database
2023-03-31 19:27
DCloud_iOS_WZT
回复 柴先生: 你那个报错可能是setTimeout导致的 同时读写数据库报错
2023-03-31 19:29