转储 sqlite3 数据库以在 Titanium 中使用

Posted

技术标签:

【中文标题】转储 sqlite3 数据库以在 Titanium 中使用【英文标题】:Dumping sqlite3 database for use in 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 移动应用程序中使用它?

【问题讨论】:

【参考方案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 可移植性的详细信息。 是的,我知道。你的两个答案肯定是正确的。归根结底,您的答案之间确实没有区别。我确实先看到了您的回答,所以我会在到期时恢复信用。

以上是关于转储 sqlite3 数据库以在 Titanium 中使用的主要内容,如果未能解决你的问题,请参考以下文章

将 SQLite3 转储导入数据库

加载数据转储时,将 Django 项目从 sqlite3 后端切换到 postgresql 失败

使用 Python sqlite3 API 的表、数据库模式、转储等列表

在 Titanium Android 中关闭移动数据时,一次拍摄 getCurrentLocation 无法获取新位置

SQL 新手只是试图导入 SQL 转储以在 python 中使用,不断收到“缺少数据库”和“缺少列”错误

将 MySQL 数据库转储转换为 SQLite - INSERT 语法