Iphone 在iOS应用程序中导入我的sql文件

Iphone 在iOS应用程序中导入我的sql文件,iphone,ios,file,sqlite,import,Iphone,Ios,File,Sqlite,Import,我在Mac OSX上有SQLite Studio,我在那里创建了我的模式,在MySQL中,我使用DBFork Manager(一个案例工具)来创建模式,我导出sql文件,然后导入MySQL服务器,所以我想使用SQLite对我的iOS应用程序做同样的事情 我的意思是,我创建了我的SQLite模式,然后我需要从一个*.sql文件导入到我的应用程序中,我给出了使用sql字符串的代码示例。。。希望你能帮助我 - (void)viewDidLoad { NSString *docsDir; NSArray

我在Mac OSX上有SQLite Studio,我在那里创建了我的模式,在MySQL中,我使用DBFork Manager(一个案例工具)来创建模式,我导出sql文件,然后导入MySQL服务器,所以我想使用SQLite对我的iOS应用程序做同样的事情

我的意思是,我创建了我的SQLite模式,然后我需要从一个*.sql文件导入到我的应用程序中,我给出了使用sql字符串的代码示例。。。希望你能帮助我

- (void)viewDidLoad {
NSString *docsDir;
NSArray *dirPaths;

// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(
                                               NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = dirPaths[0];

// Build the path to the database file
_databasePath = [[NSString alloc]
                 initWithString: [docsDir stringByAppendingPathComponent:
                                  @"contacts.db"]];

NSFileManager *filemgr = [NSFileManager defaultManager];

if ([filemgr fileExistsAtPath: _databasePath ] == NO)
{
    const char *dbpath = [_databasePath UTF8String];

    if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
    {
        char *errMsg;
        const char *sql_stmt =
        "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";

        if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
        {
            _status.text = @"Failed to create table";
        }
        sqlite3_close(_contactDB);
    } else {
        _status.text = @"Failed to open/create database";
    }
}
[super viewDidLoad];

}

我假设您在SQLite中有一个数据库文件,并希望将其安装到iPhone上使用。如果您在程序中编译它,那么它将在文件包中。但是,这是只读的,因此如果您想更改数据库,则需要将其复制到iphone的documents目录(或其他更合适的目录)。查看此问题的答案:


问题出在哪里?你不知道如何读取文件吗?我知道,但我认为我的问题是该sql文件的目录,例如,我在项目中添加了sql文件,然后我使用:NSArray*path=NSSearchPathForDirectoriesInDomains(?,NSUserDomainMask,YES);因此,这是我的项目的路径,在应用程序完成后将可用,以及如何将NSString转换为字符,因为在sqlite_exec(_db,sql_stmt好的,谢谢,这意味着我可以在“文档”中编译之前添加文件目录,然后更改其代码。将文件添加到项目中时,它将最终位于项目的捆绑包中。在设备上安装应用程序后,应用程序必须将原始数据库复制到documents目录(或其他可写目录),然后才能获得对数据库的写访问权限。(即,您必须从应用程序中打开目录中的数据库,而不是捆绑包中的数据库)。