应用程序在设备上运行时如何获取Sqlite数据库文件?

Nit*_*ish 7 sqlite iphone

我在设备上运行时遇到访问数据库文件的问题.我怎么能得到那个文件?在模拟器上运行应用程序时访问文件没有问题.就像我在模拟器上运行应用程序时,DB文件位于:

/Users/Nitish/Library/Application Support/iPhone Simulator/4.3/Applications/1B787527-0608-4BC1-8022-DFDB3CC35F66/mysqlite.sqlite
Run Code Online (Sandbox Code Playgroud)

当应用程序在设备上运行时,我在哪里可以找到DB文件?

Shi*_*mon 20

阅读所有评论和答案,我认为没有人真正回答作者的简单问题:

如何在实际设备上运行时访问sqlite数据库文件(这不是作为作者指示的iPhone模拟器中的问题)

这是我做的:

  1. (一次!)确保所有隐藏文件在Mac上都可见:在终端窗口中运行:默认写入com.apple.Finder AppleShowAllFiles YES

  2. 在Xcode中,打开管理器 - >设备,找到你的iPhone,并从他们在Applications文件夹中找到你的应用程序.

  3. 在底部单击下载并将应用程序下载到桌面(任何地方)

  4. 打开Finder,导航到下载的文件,右键单击它并选择Show Package Contents.视图将更改为标准查找程序视图,并在该应用程序中打开文件.

  5. 转到Documents文件夹,找到*.sqlite文件,右键单击它并选择Open With - > Other

  6. 选择SQLite数据库浏览器(http://sqlitebrowser.sourceforge.net)并通过数据库浏览器欣赏数据库视图.

一旦完成一次,运行整个过程只需不到一分钟.


Chr*_*orr 11

我使用此方法获取数据库的URL:

+ (NSURL *)storeURL
{
    if ([self isExecutingUnitTests])
    {
        NSString *directory = [[NSFileManager defaultManager] currentDirectoryPath];
        return [NSURL fileURLWithPath:[directory stringByAppendingPathComponent:@"UnitTests/test-database.sqlite"]];
    }
    else
    {
        return [NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.sqlite"]];
    }
}
Run Code Online (Sandbox Code Playgroud)

它在模拟器上,设备上甚至在执行单元测试时都能正常工作!UnitTests和Documents都应该存在于.xcodeproj的级别上.


Kai*_*ser 5

正如其他人所说,您的数据库不应该位于应用程序的根文件夹中.如果要从捆绑包中加载静态数据库(即通过在xCode中添加数据库而预加载的数据库),则必须通过捆绑包访问它.

NSString *path = [[NSBundle mainBundle] pathForResource:@"mysqlite" ofType:@"sqlite"];
Run Code Online (Sandbox Code Playgroud)

如果要从文档目录访问该文件(即它已被修改或保存).

NSString *fileName = @"mysqlite.sqlite";
NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSString *path = [directoryPath stringByAppendingPathComponent:fileName];
Run Code Online (Sandbox Code Playgroud)