/** App.tsx **/
useEffect(() => {
getUserDBVersion().then((res) => {
const user_version = res.rows._array[0].user_version;
if (user_version < 1) {
//User has old version
//(1) Run function to upgrade your database tables
alterTables().then(() => {
//(2) Update user_version so that next time you can check if < 2 for new updates
updateUserVersion(1);
});
}
});
}, []);
2条答案
按热度按时间w41d8nur1#
当您将列添加到现有表中时,您将看到如下错误
在Error块中,您可以更改表格并添加您的列。确保在错误块中编写代码
blpfk2vs2#
像往常一样,官方文件只包含基本信息,没有太多关于迁移或数据库升级的信息。
经过长时间的研究,我发现SQLite有
user_version
,可以用来知道用户当前使用的是哪个版本,在此基础上我们可以执行升级查询。我使用的是
expo-sqlite
,但下面的解决方案应该也适用于react-native-sqlite-storage
示例:
我认为这是一种优雅的方式,有两个原因
1.您可以在一个位置更新所有数据库和表
1.在所有迁移完成之前,您可以显示闪屏
*为了可读性,我没有在上面添加错误处理部分
如果不相应更新您的代码,
react-native-sqlite-storage
的大部分代码将是相同的上面的代码是类型脚本,如果您使用JSX,只需删除类型