【问题标题】:SQLITE with Android (best methodology for setting up a database)SQLITE with Android(建立数据库的最佳方法)
【发布时间】:2011-12-29 03:29:20
【问题描述】:

我已经看到了几种不同的方法,您可以将 SQLite 用作您的应用程序的数据库。它们如下:

  • 已创建数据库并通过 XML 文件导入数据。
  • 使用 SQLite GUI(SQLite 数据库浏览器)
  • 通过数据库助手类直接创建数据库。

每一种都有什么好处?我倾向于使用 SQLite 数据库浏览器来加载我的应用程序需要的一些表。我也会有用户输入。

您是否建议我为他们的输入和联合增加一个表格,或者允许用户输入我提供的表格。我预见的一个问题是应用程序升级(通过市场),我不希望用户丢失他们输入的数据。

谢谢!

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    我做了一个选择:

    • 将每个架构和数据填充文件作为脚本存储在资源中
    • 创建了一个从资源运行这些脚本的包装类
    • 其中一个资源文件是众所周知的(按名称)清单,它有一个脚本列表,要按哪个顺序运行。
    • 我在数据库中有一个 poperties 表,其中存储了最后运行的脚本。

    这意味着:

    • 创建时(首次运行)- 它会连续运行所有脚本
    • 当应用程序更新时 - 它会运行所有尚未运行的脚本。此更新在资源中包含更多脚本。

    脚本更新架构并修改/修改现有客户数据 - 当然不会丢失数据。

    顺便说一句,我在 iOS 上这样做的目的是在 android、winphone 和其他平台之间共享这些 sqlite 脚本。您只需要运行序列的每个平台上的包装类。

    这也意味着我可以在需要时从命令行按顺序运行脚本以创建数据库...

    编辑:

    例如,在我的示例应用程序中,Update1.sql 是作为资源添加的文件。它有两个 sql 批处理。我的包装器打开清单文件,获取要运行的脚本列表,查询数据库以查看最后运行的脚本,然后创建要运行的脚本数组。当它运行列表中的 Update1.sql 时,我的包装类执行该文件中作为资源嵌入的所有语句。例如,这是我的 Update1.sql

    alter table messages add column user text;
    
    create table log
    (
        id integer primary key autoincrement, 
        information text    
    );
    

    现在,假设创建的新表需要一些数据。 (在我的情况下,日志表没有)。该脚本可以在创建表之后包含一系列插入语句。

    在脚本中执行多个批处理需要在 prepare 中使用 tail 参数。如果你想看的话,我有 C/objective-c 代码,但我还没有编写 android 包装器...

    【讨论】:

    • 谢谢 bryanmac... 所以您的建议是使用选项一 - 创建数据库并通过 XML 文件导入数据。通过编码创建数据库,然后通过 XML(或一些分隔文件)加载数据库。我是 Android 开发的新手,但不是一般的数据库。那么在APP更新时,新APP是否会从旧APP中导出用户数据,然后将这些数据导入到新APP的数据库中呢?完全重装?还是只是更改APP的代码并保持数据库原样? (如果 dbase 上没有版本更改)?
    • 不是真的 - 它不是通过编码创建的 - 模式和数据是通过 sql 脚本创建的,您只有一个执行这些脚本的包装库。随着您的架构和数据随时间变化 - xml 不够强大。例如,您可能需要通过查询连接数据以填充新表而不会丢失数据。在 update1 和 2 之间,您可能想要添加一个新列并使用默认值填充它。脚本很关键,因为当更新出来时,只有增量更改必须运行。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多