如何将 Sqlite 数据库文件复制/放入设备以在其上测试应用程序 - Xcode

Posted

技术标签:

【中文标题】如何将 Sqlite 数据库文件复制/放入设备以在其上测试应用程序 - Xcode【英文标题】:how to copy/put Sqlite Database file to Device to test app on it - Xcode 【发布时间】:2014-06-10 23:19:38 【问题描述】:

我到处搜索,但找不到这个问题的答案。我制作了一个使用以前构建的 Sqlite 数据库的应用程序。在模拟器上我的数据库文件位于 /Users/idsMac/Library/Application Support/iPhone Simulator/7.1/Applications/AAAAAAAA-CCCCC-DDDD-7777-PPPPPPPPP/Documents/

我正在使用下面的代码来读取这个 Sqlite 数据库文件。

-(NSString *)dataFilePath
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths lastObject];
return [documentsDirectory stringByAppendingPathComponent:@"punDictionary.sqlite"];

if((sqlite3_open([[self dataFilePath] UTF8String], &_database)) != SQLITE_OK)
        NSLog(@"Failed to open Database");
    else
        NSLog(@"Database Connceted ..... ");
    

我的应用程序在模拟器上运行良好。但是当我在我的 ios 设备上测试它时。它没有检测到数据库。 我的问题是如何将 sqlite 数据库文件添加到我的应用程序以在设备上进行测试?

提前致谢!

【问题讨论】:

【参考方案1】:

将 Sqlite DB 文件包含到您的项目中,如果应用访问 DB 文件时不存在,则将其复制到 Documents 文件夹中。

#define DB_NAME @"XXX.sqlite"
#define DB_FULLPATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:DB_NAME]


+ (void)createDatabase

    NSFileManager *fileManager = [NSFileManager defaultManager];
    if(![fileManager fileExistsAtPath:DB_FULLPATH]) 
        NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:DB_NAME];
        [fileManager copyItemAtPath:bundlePath toPath:DB_FULLPATH error:nil];
    


【讨论】:

哪个文档文件夹?

以上是关于如何将 Sqlite 数据库文件复制/放入设备以在其上测试应用程序 - Xcode的主要内容,如果未能解决你的问题,请参考以下文章

如何将预先存在的 sqlite 文件放入 <Application_Home>/Library/?

xcode sqlite3 如何将数据库从捆绑包复制到文档文件夹?

无法将 SQLite 数据库从资产文件夹复制到设备内存

在 bash 脚本中,如何引用单独的文件以在 for 循环中使用它? [复制]

如何将 SQLite 文件从 Documents 目录保存回目标 C 中的主包?

Listview和复选框(如何放入数据库(sqlite))