我在Reaction Native中创建了一个将数据保存到数据库程序,但当重新打开EXPO并再次运行时,程序数据库被删除,并创建了新的空数据库
async save() {
if (!(await FileSystem.getInfoAsync(FileSystem.documentDirectory + 'SQLite')).exists) {
await FileSystem.makeDirectoryAsync(FileSystem.documentDirectory + 'SQLite');
}
await FileSystem.downloadAsync(
Asset.fromModule(require('../assets/factor.db')).uri,
FileSystem.documentDirectory + 'SQLite/factor.db'
);
const db = SQLite.openDatabase('factor.db');
db.transaction((tx) => {
tx.executeSql("INSERT INTO factors (created_at,customer,sender,pay,off,description,customer_id)
values(?,?,?,?,?,?,1)",
[this.state.date, this.state.customer, this.state.sender, this.state.payment, this.state.offset,
this.state.description],
(trans, rows) => {
alert('factor added');
console.log(rows);
db._db.close();
},
(err, msg) => {
console.log(msg);
});
tx.executeSql(
"SELECT * FROM factors",
[],
(trans, res) => {
console.log(res.rows);
db._db.close();
},
(err, msg) => {
console.log(msg);
});
}, null);
}
在运行之后,选择SQL返回一行,并且不显示之前添加的前一行
1条答案
按热度按时间sg24os4d1#
因为我上周遇到了这个问题,我花了一段时间才找到答案。在我的设备上运行EXPO时,数据库更改是对设备上的本地数据库进行的,而不是作为我的代码中的资产包含的预填充或空白数据库。在不重新运行“EXPO Start”的情况下重新加载应用程序将保留设备上的数据库,但停止服务器并重新运行“EXPO Start”将启动一个新的应用程序版本,该版本将覆盖在以前的示例中所做的任何更改。