转储 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 category
和 select category
之间有什么区别吗?我应该使用哪个?
@undacovabroda45, select distinct
将过滤掉重复项,select
本身将包含所有结果,甚至是重复项。
@undacovabroda45:我想我有点输不起,但是我的答案如何不那么相关,因为我把它作为一个普遍的观点,而不是钛的观点,sqlite 文件是交叉的平台。此外,您选择的答案与我 在 之后提出的两点相同,尽管有更多关于使用 .dump 的详细信息,但再次没有关于 sqlite 可移植性的详细信息。
是的,我知道。你的两个答案肯定是正确的。归根结底,您的答案之间确实没有区别。我确实先看到了您的回答,所以我会在到期时恢复信用。以上是关于转储 sqlite3 数据库以在 Titanium 中使用的主要内容,如果未能解决你的问题,请参考以下文章
加载数据转储时,将 Django 项目从 sqlite3 后端切换到 postgresql 失败
使用 Python sqlite3 API 的表、数据库模式、转储等列表
在 Titanium Android 中关闭移动数据时,一次拍摄 getCurrentLocation 无法获取新位置