Android SQLiteOpenHelper - 每个表都有不同的类?

2024-01-31

我正在读这篇文章(http://www.vogella.com/tutorials/AndroidSQLite/article.html http://www.vogella.com/tutorials/AndroidSQLite/article.html)了解 Android 应用程序中的 SQLite 数据库。

他在文章中给出了一个建议:

最好为每个表创建一个单独的类。此类定义静态 onCreate() 和 onUpgrade() 方法。这些方法在SQLiteOpenHelper的相应方法中调用。这样,即使您有多个表,SQLiteOpenHelper 的实现也可以保持可读性。

如果我正确理解了这个技巧,我应该为数据库中的每个表都有一个类?

这真的是最佳实践吗?

如果是这样,那么使用多个表的复杂查询怎么样?如果创作属于不同的班级,我该如何管理?

如何正确保存数据库版本?对于每个表的更改我都会更改数据库版本号?

Thanks


SQLiteOpenHelper管理数据库文件,而不是表。您可以使用给定的数据库生命周期回调自行管理表(onCreate(), onUpgrade()).

快速阅读可能会解释为作者主张为每个表创建一个单独的数据库助手(我一开始就是这样做的),但事实并非如此。那将是一个糟糕的建议。

重申一下作者的意图:

  • 一个数据库辅助类。
  • 帮助程序涉及单独的特定于表的帮助程序类,这些类不是SQLiteOpenHelper但只是为顶级数据库助手做部分工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SQLiteOpenHelper - 每个表都有不同的类? 的相关文章

随机推荐

  • Visual Studio 2022 未加载依赖项

    升级到 Visual Studio 2022 并安装 Net 6 0 SDK 后 我似乎在运行项目时遇到问题 每当我打开现有项目甚至创建新项目时 我都会收到以下依赖项错误 如果我尝试构建项目 我会收到错误 错误列表中没有任何错误 尝试了一些
  • Node.js 如何响应升级请求?

    我正在处理来自 Node js http 服务器的 websocket 升级 事件 升级处理程序的格式为 function req socket head 如果没有资源 我如何发送对此升级请求的响应目的 有没有办法使用套接字对象来做到这一点
  • Python 使用新的相机位置创建图像

    我现在正在努力完成一项特定的计算机视觉任务 例如 假设我们有一个道路的相机框架 现在我想用水平平移的假想相机生成一个新帧 此外 还添加了一个微小的摄像角度 为了说明这一点 我上传了一张演示图片 如何在 python 中从原始框架创建新框架
  • Oracle SQL:收到“没有匹配的唯一键或主键”错误,但不知道原因

    我在尝试创建表时收到此错误 但我不知道为什么 2016 07 05 14 08 02 42000 2270 ORA 02270 no matching unique or primary key for this column list 这
  • 为 Windows 中的目录生成校验和

    我想为目录创建校验和 我正在遵循对此给出的答案post https stackoverflow com questions 17228202 generate md5 keys and save in a text file 但问题是它正在
  • Java 中带有过期时间的对象池的第三方库

    我在 Web 服务服务器上 并且有具有内部连接的对象 初始化此连接需要很长时间 因此我的想法是使用对象池来重用不同请求之间的连接 这些对象连接到每个用户 因此我更喜欢使用用户名作为键 使用连接作为值 但我不想让连接永远打开 也许一段时间后
  • 接口,无法在Unity配置上构建

    我在这个项目上使用 Unity 时遇到问题 错误是 当前类型 Business Interfaces IPersonnelBusiness 是 接口 无法构造 您是否缺少类型映射 由于堆栈溢出 我已将 Unity 更新到最新版本issue
  • Laravel PHPunit Dataprovider 错误“指定的数据提供者无效”

    我正在使用 dataprovider 并从数据库中获取数据 public function logoProvider result Event inRandomOrder gt select id gt whereNotNull logo
  • 如何在 bash 中使用变量的值作为另一个变量的名称[重复]

    这个问题在这里已经有答案了 我想声明一个变量 其名称来自另一个变量的值 我编写了以下代码 a bbb a ccc 但没有成功 完成这项工作的正确方法是什么 eval用于此目的 但如果您天真地这样做 将会出现令人讨厌的转义问题 这种事情通常是
  • 地址窗口扩展

    我有一个 32 位应用程序 需要非常大的内存 我注意到有一种东西叫做地址窗口扩展 http msdn microsoft com en us library aa366527 28v vs 85 29 aspx 然而 我还没有找到太多关于如
  • Django:将整个模型对象集转换为单个字典

    如果您从 Google 来到这里寻找听写模型 请跳过我的问题 直接跳到第一个答案 我的问题只会让你感到困惑 Django 中有没有一种好方法可以将整个模型对象集放入单个字典中 我的意思是 像这样 class DictModel models
  • 您可以使用多个过滤器调用 Directory.GetFiles() 吗?

    我正在尝试使用Directory GetFiles 方法来检索多种类型的文件列表 例如mp3 s and jpg的 我尝试过以下两种方法 但没有成功 Directory GetFiles C path mp3 jpg SearchOptio
  • asterisk agi (php) 文件调试

    有谁知道调试 asterisk 的 agi secript a2billing php 所需的步骤 如果我从 Linux 控制台调用 php cli 我就可以远程调试它 但如果它从 asterisk 内部运行 则不起作用 知道如何调试它吗
  • 更改Fiddler根证书以成功解密HTTPS

    有没有办法更改Fiddler的根证书 当客户端应用程序使用证书固定并且我可以访问密钥库 其证书受到客户端应用程序信任 时 我希望使用它 我想你是在问 我可以更改 Fiddler 用于特定站点的证书吗 而不是root证书 用于所有站点 是的
  • 为什么使用 std::make_* 而不是构造函数更好?

    STL中有一些函数以make 前缀如std make pair std make shared std make unique等等 为什么使用它们而不是简单地使用构造函数是更好的做法 auto pair2 std pair lt int d
  • 添加 VPC 配置后调用 lambda 超时

    我正在使用无服务器框架来创建 lambda 我创建了一个简单的 Lambda 函数 它从 Mongo 实例进行查询并返回响应 最初 我使用 publicIp 创建了 Mongo 实例 并让 Lambda 使用 publicIP 访问该实例
  • 在 mysql 脚本中静默“Query OK 0 row受影响”输出

    我有一个创建多个存储过程的 MySQL 脚本 我想让大家沉默 Query OK 0 rows affected 0 00 sec 当我运行时出现的消息 source MY SCRIPT sql 它变成了一个很长的列表 我有时会忘记在开发过程
  • Visual Studio 2010 中的 Microsoft 图表控件?

    这可能吗 我安装了它们 但它们没有出现 我必须导入它们还是什么 如果在工具箱中看不到 Chart 控件 请右键单击工具箱 选择 选择项 然后在 NET Framework 组件 选项卡中选择以下命名空间 System Web UI Data
  • 设置带有子包的 python 包的正确方法

    我正在尝试在 python 中设置一个带有子包的包 这是我目前拥有的树结构 myPackage init py mySubPackage1 foo2 py foo py init py mySubPackage2 bar2 py bar p
  • Android SQLiteOpenHelper - 每个表都有不同的类?

    我正在读这篇文章 http www vogella com tutorials AndroidSQLite article html http www vogella com tutorials AndroidSQLite article