Android SQLite 数据库,为什么删除表并在升级时重新创建

2024-04-05

在我正在关注的教程以及更多地方我看到了这一点, onUpgrade -> 删除表(如果存在),然后重新创建表。

这样做的目的是什么?

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME + " TEXT NOT NULL, " +
                KEY_HOTNESS + " TEXT NOT NULL);"
        );  
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }       
}

我同意当您升级时,您应该向数据库添加列或添加表。大多数 onupgrade 示例实际上很糟糕,因为为什么我要删除所有这些数据然后重新创建表?我发现这个博客条目我称之为Adams增量更新法。它还可以处理用户可能未在每个版本中升级您的应用程序的情况。

这是关于 sqlite onupgrade 的一个很好的博客,它不执行删除表操作。 http://blog.adamsbros.org/2012/02/28/upgrade-android-sqlite-database/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SQLite 数据库,为什么删除表并在升级时重新创建 的相关文章

  • 为 DownloadManager 的 BroadcastReceiver 设置附加功能 [重复]

    这个问题在这里已经有答案了 有一种方法可以添加额外内容DownloadManager已登记行动意图DownloadManager ACTION DOWNLOAD COMPLETE 例如 接收一个在意图中设置为额外的布尔值 这就是我创建请求的
  • 在源代码管理中管理我的数据库

    由于我正在处理一个新的数据库项目 在 VS2008 中 而且我从未从头开始开发数据库 因此我立即开始研究如何在源代码管理 在本例中为 Subversion 中管理数据库 我找到了一些关于SO的信息 包括这篇文章 保持多个环境中的开发数据库同
  • 不使用窗口函数实现 SQL 查询

    我读过 可以通过创造性地使用连接等来实现在 SQL 窗口函数中可以执行的任何操作 但我不知道如何实现 我在这个项目中使用 SQLite 它目前没有窗口函数 我有一个有四列的表 CREATE TABLE foo id INTEGER PRIM
  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • 更改 Android Spinner 布局/设计

    我正在尝试修改设计Spinner http developer android com intl de reference android widget Spinner html小部件 我可以更改背景 但找不到更改右侧箭头图标的方法 有办法
  • 指标元素之间的空间

    如何增加 减少指标元素之间的空间ViewPagerIndicator 我用过CirclePageIndicator 我能够通过以下步骤在两个指标之间留出更多空间 打开源代码CirclePageIndicator并找到变量mRadius 在第
  • Android:从 https url 获取响应

    问候 我正在开发一个 Android 应用程序 需要通过 https 打开一个 url 带有 POST 参数 并获取响应 我有一个自签名证书 这让情况更加复杂 我还需要接受cookies 有人知道从哪里开始吗 提前谢谢了 Android 附
  • 在应用程序启动期间更改主题的最快方法

    目前 我确实在我的应用程序中根据用户最后的选择提供了 2 个主题 深色主题和浅色主题 在主要活动启动期间 我将执行以下操作 public class MyFragmentActivity extends FragmentActivity O
  • 拦截来自外部应用程序的意图

    假设我想开发一个以某种方式扩展的应用程序 让我说 合作 非常受欢迎的应用程序我显然无法控制 为了简单起见 我们还假设非常著名的应用程序作者不会发布更新来阻止我的应用程序 我研究了该应用程序的功能并发现它广泛使用BroadcastReceiv
  • CollapsingToolbarLayout 禁用绘制扩展

    我有一个已有条件禁用的 CollapsingToolbar 当用户在这种情况下加载视图时 它看起来就像一个普通的 ToolBar 对象 唯一奇怪的是 如果它们向下拖动 例如在拉动刷新样式操作中 折叠工具栏就会展开 尽管我的愿望和代码与此相反
  • AWS MobileHub:重命名 Android / iOS 示例项目

    我是 AWS Mobilehub 的新手 我喜欢它允许我使用 AWS 配置选项创建项目 但是 当我尝试构建应用程序 ios swift android 时 它总是使用我的示例项目作为项目名称 在 AWS 项目的大多数配置设置中 例如使用 c
  • CheckedTextView 的中心文本和复选标记

    我实现的布局如下图所示 我使用的代码是
  • 使用 Asp.Net 的 GCM 推送通知

    正如您可能已经看到的 Google 正在迁移其推送通知系统 http developer android com guide google gcm c2dm html http developer android com guide goo
  • 将样式应用于警报对话框

    我决定尝试材质警报dialogs https material io develop android components dialog 在安卓上 我遇到的问题是当我尝试应用某些样式时 检查文档 我发现了这个
  • 如何增加颤振中切屑的宽度

    我想增加宽度Chip 我怎样才能实现这个目标 Chip elevation 6 0 backgroundColor Colors white shape RoundedRectangleBorder borderRadius BorderR
  • Android 上的 Jetty 上的 Jersey 抛出 ContainerException:“不存在 WebApplication 提供程序”

    我正在尝试在 Android 上的 Jetty 上运行 Jersey 我创建了一个 Android 它使用 Jersey Servlet 实例化 Jetty 服务器 无论如何 当我启动 Jetty 并访问 REST 资源时 在我的例子中 h
  • 有没有办法模拟小部件或屏幕特定位置的触摸?

    我想触摸或点击小部件上的某处 而不让用户在此时明确触摸屏幕 有什么办法可以做到吗 我已经检查了SO答案 有些人建议使用 集成测试 但在未物理或以某种方式连接到笔记本电脑的设备上无法执行 集成测试 无法找到更好的措辞 我还尝试进行 hitTe
  • Kotlin 中是否有类似于 #region #endregion 的语法?

    我知道我可以使用 region endregion 包围 C 中的代码片段 Kotlin 中是否有类似的语法 谢谢 region MyRegion protected void Page Load object sender EventAr
  • Android:如何为我的应用程序播放的任何音乐文件创建淡入/淡出音效?

    我正在开发的应用程序播放音乐文件 如果计时器到期 我希望音乐淡出 我怎么做 我正在使用 MediaPlayer 播放音乐 音乐文件位于我的应用程序的原始文件夹中 这是我的 Android MediaPlayer 的整个处理程序类 查看 pl
  • 如何更改焦点/按下时图像按钮的色调

    我有一个ImageButton在我的应用程序中 当按钮打开时我需要更改图像的色调pressed focused 我有ImageButton设置为获取其src来自 XML 文件 如下所示

随机推荐

  • 如何在自定义模板标签上使用模板过滤器?

    我有一个关于模板标签的 Django 问题 我有一个名为的模板标签modal form有 4 个参数 该模板标签与基本变量完美配合 例如 modal form clients contact form Contacts contact 但当
  • 如何在 django 模板中实现运行总计?

    我有一个视图返回按 sales date 分组的销售摘要 例如 sale date datetime datetime 2010 10 5 0 0 salesum 2 item 1 sale date datetime datetime 2
  • 从 @OneToMany 关系获取最后一条记录

    我有几个具有 ManyToOne 和 OneToMany 关系的实体 问题是我正在寻找一种方法来获取从关系的 OneToMany 端插入的最后一条记录 而不加载列表中的所有记录 实际上 我将最后一条记录保存在 ClassB 中的 OneTo
  • 如何在 Android 中与正在运行的线程进行服务通信

    我的目标是推出一项能够满足所有应用程序网络需求的服务 我想也许打开2个套接字用于数据传输 我希望异步处理数据 所以我想我应该在两个单独的线程中运行它们 每个线程针对每个套接字 这样数据就可以在两个不同的 链接 异步中进行流式传输 所以 我希
  • 删除所有具有给定名称的 XML 属性

    我正在编辑一系列 XML 文件 需要删除所有名为 foo 的属性 此属性出现在不止一种类型的元素中 XML 的示例片段可能是
  • Delphi - 如何使用 Delphi 制作所见即所得 HTML 编辑器? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何制作一个 易于 使用的所见即所得
  • 使用 PHP 流式传输大文件

    我有一个 200MB 的文件 我想通过下载提供给用户 但是 由于我们希望用户只下载该文件一次 因此我们这样做 echo file get contents http some secret location com secretfolder
  • 通过 UIMenuController 的 UIMenuItem 传值

    我正在使用以下方法在 UITableViewCell 中长按时显示菜单 我需要将按删除菜单项的值传递给 void numberDelete 方法 void handleLongPress UILongPressGestureRecogniz
  • 如何使 colspan 工作而不影响其他行的宽度

    我注意到a的内容td所有列上的 colspan 都会影响其他行的宽度td 谁能解释一下这是为什么以及如何让它正常工作 我有两个要求 第一行第二列应占用尽可能多的空间 展开 第二行应采用 100 宽度 在示例中使用 colspan 2 Not
  • Python Json小写nan

    我正在尝试在 python 中解析一些 json 并且我正在利用 NaN 不幸的是 我的源代码将 NaN 写为如下 foo nan 这实际上并不少见 在Python中是这样的float nan 得到 NaN 和 C 输出nan来自 NaN
  • bq 命令行工具 - 如何插入具有嵌套字段的大查询表?

    我有三个 BigQuery 表 如下所示 Employee Employee id Department id Location id Name Age 部门 Department id Department Name Department
  • 使用硬件加速内容截取 WKWebview 的屏幕截图

    我在截屏时遇到严重问题WKWebview内容当有硬件加速内容 一些在 iframe 内运行的特定赌场游戏 到目前为止 我使用了像大家建议的标准截图方式 UIGraphicsBeginImageContextWithOptions conta
  • PHP 中可选包含

    我有一个包含常规配置的配置文件 在 git 存储库中 以及一个覆盖配置属性的本地配置文件 在存储库中被忽略 现在本地配置文件包含在配置文件的开头 include once local config php 但我希望包含是有条件的 仅当文件
  • 防止 PR 完成后删除分支

    在 Azure Devops 中 我有一个带有开发分支的 git 存储库 我们从此分支创建多个功能分支 并通过拉取请求将代码合并到开发中 一旦我们完成拉取请求 功能分支就会被删除 我想阻止这种情况发生 我想保留这些功能分支 我怎样才能做到这
  • 使用 Celery 创建动态队列

    这是我的场景 当用户登录我的网站时 我会为给定用户排队一堆任务 通常每个任务需要 100 毫秒 每个用户有 100 多个任务 这些任务排队到默认的 Celery 队列中 并且我有数百个工作线程正在运行 当任务在后端完成时 我使用 webso
  • 将新的 Date() 格式设置为 EEE MMM dd HH:mm:ss zzz yyyy

    我使用 new date 显示日期 时间 目前显示的是 Thu May 31 2012 13 04 29 GMT 0500 CDT 我需要这个 Thu May 31 13 04 29 CDT 2012 我该如何格式化它 您可以使用正则表达式
  • 两个 .Net 应用程序之间的高效通信

    我目前正在用 c 编写一个 Net 应用程序 它有两个主要组件 数据生成器 生成大量数据的组件 Viewer 能够可视化生成器创建的数据的 WPF 应用程序 这两个组件目前是我的解决方案中的两个单独的项目 此外 我正在使用棱镜4 0框架 以
  • 安排 Web Api 方法按设定的时间间隔运行

    在我当前的项目中 需要安排一个方法以设定的时间间隔运行 例如每周一次 目前这是通过 Windows 服务创建 HttpClient 并点击所需的控制器方法来完成的 我想知道这是否可以在 Web Api 项目本身中实现自动化 而不是使用外部服
  • JsonIgnore 在 System.Web.Mvc.Controller 中不起作用

    我有一个 Web API 项目和一个带有一些属性的简单类 其中一些已标记
  • Android SQLite 数据库,为什么删除表并在升级时重新创建

    在我正在关注的教程以及更多地方我看到了这一点 onUpgrade gt 删除表 如果存在 然后重新创建表 这样做的目的是什么 private static class DbHelper extends SQLiteOpenHelper pu