【问题标题】:Dumping sqlite3 database for use in Titanium转储 sqlite3 数据库以在 Titanium 中使用
【发布时间】:2012-09-03 17:29:18
【问题描述】:

所以,由于某种原因,我的 sqlite 数据库有点问题。我正在尝试将我的数据库转储到可以在 Titanium 中使用的文件中。我知道.dump 命令,但是当我尝试使用 sqlite 网站上的说明时:

制作数据库存档副本的一个好方法是:

$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz

并将ex1.dump.gz 更改为ex1.sqlite.gz,它给出了一个非常混乱无用的文件。如何转储我的数据库,以便在我的 Titanium Studios 移动应用程序中使用它?

【问题讨论】:

    标签: database sqlite titanium


    【解决方案1】:

    当您可以简单地复制数据库文件时,为什么要转储它,即按原样使用它?

    正如here 解释的那样,sqlite 数据库是跨平台的:

    SQLite 中的数据库是单个磁盘文件。此外,该文件 格式是跨平台的。在一台机器上创建的数据库 可以在不同的机器上复制和使用 建筑学。 SQLite 数据库可跨 32 位和 64 位移植 机器以及大端和小端架构之间。

    另一方面,你应该能够像这样转储、压缩你的数据库:

    echo '.dump' | sqlite3 foo.db | gzip -c > foo.dump.gz
    

    并在新的 SQLite 数据库中恢复它:

    gunzip -c foo.dump.gz | sqlite3 foo.new.db
    

    【讨论】:

      【解决方案2】:

      .dump 将数据库的内容导出为一系列插入语句。如果你在没有gzip 命令的情况下运行它,你会看到纯文本 sql:

      $ echo '.dump' | sqlite3 ex1
      

      但您无需这样做即可在 Titanium Studios 中使用 SQLite 数据库。它原生支持 SQLite。只需将数据库文件复制到您的项目目录,然后使用如下代码打开它:

      var db = Ti.Database.install('../products.sqlite','products');  
      
      var rows = db.execute('SELECT DISTINCT category FROM products');  
      

      更多细节在这里:

      http://mobile.tutsplus.com/tutorials/appcelerator/titanium-mobile-database-driven-tables-with-sqlite/

      【讨论】:

      • 两个答案都说了同样的话,但你包含了更多的相关性。我所做的只是复制了我在 sqlite3 中使用的文件,然后将其移动到我的应用程序的资源文件夹中。虽然我只是想知道,select distict categoryselect category 之间有什么区别吗?我应该使用哪个?
      • @undacovabroda45, select distinct 将过滤掉重复项,select 本身将包含所有结果,甚至是重复项。
      • @undacovabroda45:我想我有点输不起,但是我的答案如何不那么相关,因为我把它作为一个普遍的观点,而不是钛的观点,sqlite 文件是交叉的平台。此外,您选择的答案与我 之后提出的两点相同,尽管有更多关于使用 .dump 的详细信息,但再次没有关于 sqlite 可移植性的详细信息。
      • 是的,我知道。你的两个答案肯定是正确的。归根结底,您的答案之间确实没有区别。我确实先看到了您的回答,所以我会在到期时恢复信用。
      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 2010-09-23
      相关资源
      最近更新 更多