Ios 如何从bundle中移动包含数据的sqlite3数据库

Ios 如何从bundle中移动包含数据的sqlite3数据库,ios,macos,sqlite,Ios,Macos,Sqlite,我使用以下命令从/usr/bin目录创建了一个带有in-terminal的数据库(空): touch /Users/myusername/Desktop/testopeningbook4.db 它显示在桌面上。然后使用add files将其导入我的Xcode OSX项目(我制作的Mac应用程序数据库),并选择“将文件复制到项目中”选项,testopeningbook4.db显示在我的Xcode项目文件(在项目导航器中)中,并位于我的应用程序项目文件夹(在finder中)。它不再在桌面上了我想我

我使用以下命令从/usr/bin目录创建了一个带有in-terminal的数据库(空):

touch /Users/myusername/Desktop/testopeningbook4.db
它显示在桌面上。然后使用add files将其导入我的Xcode OSX项目(我制作的Mac应用程序数据库),并选择“将文件复制到项目中”选项,testopeningbook4.db显示在我的Xcode项目文件(在项目导航器中)中,并位于我的应用程序项目文件夹(在finder中)。它不再在桌面上了我想我删除了那份

我在objective-c代码文件/类中打开了数据库,现在我已经在其中存储了几十万个条目,我相信(当我用select查询时,确认了其中有很多内容,但我还没有统计,我只是在xcode中运行我的应用程序来测试这一点,因为select的结果现在缺少gui,并用nslog转到控制台)

我想做的就是看看文件有多大。但是xcode项目文件夹中的一个表示它是0字节。我这样打开它:

NSString *dbPath = [[[NSBundle mainBundle] bundlePath]stringByAppendingPathComponent:@"testopeningbook4.db"];

sqlite3 *database;
if(!(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK))
{
    NSLog(@"An error has occurred did not open database.");
    return false;
}
else
{
    NSLog(@"opened database");
}
理想情况下,我要做的是复制testopeningbook4.db文件,并将其导入另一个iOS xcode项目,这次是针对iPhone/iPad应用程序。但由于xcode项目文件夹中的文件为0字节,因此不能正确复制该文件。我找到了两个链接并尝试了这两个想法(从那时起我关闭了页面,但没有链接):

有人说,从Xcode项目导航器中拖出数据库,你就可以把它拖到桌面上。我做到了。因为testopeningbook3(现在已删除)大约是440 KB,所以它看起来很小,我使用了一个小得多的源文件作为它的数据,但在xcode项目中大于0 KB。我转到/usr/bin并键入

sqlite3 /databasepathtodesktop/testopeningbook4.db
接下来在sqlite3命令提示符中键入

.tables 
它没有列出任何东西,这让我觉得它是空的,而不是我程序中的副本

我从一个链接中发现的第二个想法是归档项目,然后从归档中取出数据库。所以我制作了一个.xcsarchive文件,右键单击并显示包内容。在“内容”中,我进入我的应用程序,再次右键单击并显示软件包内容,然后进入“资源”文件夹,我的数据库位于其中,但它与我的项目目录中的一样,也是0字节

我将如何取回testopeningbook4.db,其中包含数据和兆字节,以便导入到另一个项目或在计算机之间移动

我使用的是Xcode 5.1.1谢谢Mike


编辑:将标题修改为更能描述实际问题

我在使用捆绑包上的sqlite数据库时遇到了一些问题。尝试将其复制到documents目录并尝试一下

NSString *nameDB = @"myDatabase.sqlite"
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:nameDB];
[[NSFileManager defaultManager] createFileAtPath:path contents:dataDB attributes:nil];

希望它能工作

我怀疑你的Mac应用程序在其他地方修改了该文件(请检查你的应用程序及其软件包内容的路径,或者检查代码中的路径)。未修改Xcode项目中的DB文件。或者,当我在mac上搜索testopeningbook4.db时,只需在文件系统中搜索“testopeningbook4.db”,并在finder中显示文件系统中我的项目文件夹中有0字节的副本,还有我从Xcode项目导航器拖到没有表的桌面上得到的484 KB副本(我在问题中解释了我是如何检查的)我注意到当我在终端中键入sqlite3/nonsensepath/testopeningbook4.db时,它以相同的方式打开,并且我键入了。表,我得到了相同的结果。我通过拖动从Xcode的navigator复制到桌面上的那个可能是它,但我没有在终端中正确打开它吗?你必须,在你的“第一次启动”中代码,将SQL文件从捆绑包复制到读/写存储。您无法修改捆绑包副本。不确定这意味着什么。我用我给出的代码打开了它,并在其中存储了数据,因为我一直在进行选择以查看我从Xcode运行的应用程序中的数据,我使用@“testopeningbook4.sqlite”查看这个@“myDatabase.sqlite”我使用@“testopeningbook4.sqlite”或者我在myDatabase名称中包含.db,然后附加.sqlite?我现在要尝试一下,只是想澄清一下,我还使用了未声明的标识符dataDBfor nameDB使用您自己的数据库名称,dataDB是将您的数据库作为一个文件转换为NSData。您可以使用[NSData dataWithContentsOfFile:(NSString*)]给出你的sqlite在bundle中的位置我会研究一下。它似乎想要dataDB有一个NSData类型,谢谢。这个成功了。它有374兆字节,比我预期的大。我能够重复我用这个代码复制的文件打开到终端的documents文件夹并键入。表,这一次有很多ta不是没有,谢谢