2013-01-17 75 views
0

我有SQLite Studio fot我的Mac OSX,我在那里创建了我的Schemas,在MySQL中我使用DBFork Manager案例工具来制作我的Schema,导出sql文件然后导入到MySQL服务器,所以我想用我的iOS应用程序使用SQLite做同样的事情。我想让我的SQLite架构,然后我需要从* .sql文件导入到我的应用程序,我给我的代码示例使用SQL字符串...希望你能帮助我!在我的iOS应用程序中导入我的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]; 

}

+0

什么问题呢?你不知道如何阅读文件吗? –

+0

我知道,但我的问题,我认为是该SQL文件的目录,例如我在我的项目中添加SQL文件,然后我使用: NSArray * path = NSSearchPathForDirectoriesInDomains(???,NSUserDomainMask,YES); 所以,这是我的项目的路径,将在应用完成时可用,以及如何将NSString转换为字符,因为在sqlite_exec(_db,sql_stmt < - 这里是一个char,...) ;我必须插入一个字符而不是NSString,并且我将文件的文本恢复为NSData或NSString ...并且在iOS 6.0中已弃用: NSString * textFile = [[NSString alloc] initWithContentsOfFile:path]; – rokimoki

回答

2

我假设你有一个的SQLite数据库文件,并要安装它在iPhone上使用。如果您在程序中编译它,那么它将位于文件包中。然而,这是只读的,所以如果你想改变你的数据库,你需要将它复制到iphone的文档目录(或另一个更合适的目录)。退房的回答这个问题计算器:

SQLite on iPhone

+0

好的,谢谢,这意味着我可以在编译之前在“文档”目录中添加文件,然后更改它的代码。 – rokimoki

+1

当您将文件添加到项目中时,它会在项目的包中结束。一旦您的应用程序安装在设备上,您的应用程序必须先将原始数据库复制到文档目录(或其他可写目录),然后才能获得对数据库的写入访问权限。 (即您必须从应用程序打开目录中的数据库,而不是打包数据库中的数据库)。 –

相关问题