如何使用bundle中的数据移动sqlite3数据库

时间:2014-04-28 16:33:42

标签: ios macos sqlite

我使用:/ / p>在/ usr / bin目录中使用in终端创建了一个数据库(空)

touch /Users/myusername/Desktop/testopeningbook4.db

它显示在桌面上。然后将其导入我的Xcode OSX项目(Mac app我做数据库处理),添加文件并选择复制文件到项目中,testopeningbook4.db显示在我的项目文件中的xcode(在项目导航器中)并在我的项目中应用程序的文件夹(在finder中)。它不再在桌面上我认为我删除了该副本。

我在一个Objective-c代码文件/类中打开了数据库,我现在已经存储了几十万个条目,我相信(当我用select查询时,确认它中有很多内容但我没有计算,我只是运行我的应用程序来测试这个从xcode,因为选择的结果现在缺少一个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项目导航器拖动数据库,你可以将它拖出一个副本到桌面上。我做到了它类似于440千字节,因为testopeningbook3(现已删除)大小与我相当,我使用了一个小得多的源文件来获取它的数据,但是在xcode项目中大于0千字节。我去了/ usr / bin并输入了

sqlite3 /databasepathtodesktop/testopeningbook4.db

在sqlite3命令提示符下单击

.tables 

它并没有列出anthing,导致我认为它是空的,而不是我的程序中正在运行的副本。

我从链接中找到的第二个想法是归档项目,然后将数据库从存档中取出。所以我创建了一个.xcarchive文件并右键单击并显示包内容。在内容中,我进入我的应用程序并再次右键单击并显示包内容,然后我进入资源文件夹,我的数据库就在那里,但它又是0字节,就像我的项目目录中的那个。

如何将testopeningbook4.db与数据和兆字节全部分开,以便导入另一个项目或在计算机之间移动。

我正在使用Xcode 5.1.1感谢Mike

编辑:修改标题以更好地描述实际问题

1 个答案:

答案 0 :(得分:2)

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

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

希望它有效