这是我第一次尝试在 iOS 中创建和访问 SQLite 数据库,我按照教程进行操作,但我无法完成这项工作。这些是我遵循的步骤:
- 通过 Firefox 插件(“testDatabase”)和一个包含几列的表(“testTable”)创建了一个数据库
- 将“testDatabase.sqlite”文件保存在目录中
- 将此类文件拖放到我的 Xcode 项目中的“支持文件”组中
- 在 Build Phases > Link Binary With Libraries 中添加了“libsqlite3.dylib”
- 在 Build Settings > Linking > Other Linker Flags > Debug and Release 中添加了“-lsqlite3”
在一个 ViewController 中,调用了这个方法:
-(NSString *)copyDatabaseToDocuments { NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testDatabase.sqlite"]; if ( ![fileManager fileExistsAtPath:filePath] ) { NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"testDatabase.sqlite"]; [fileManager copyItemAtPath:bundlePath toPath:filePath error:nil]; } return filePath; }
然后,尝试在数据库中写入:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testDatabase.sqlite"]; sqlite3 *database; if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) { const char *sqlStatement = "insert into testTable (id) VALUES (?)"; sqlite3_stmt *compiledStatement; if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { sqlite3_bind_int(compiledStatement, 1, newObject.ID); } if(sqlite3_step(compiledStatement) == SQLITE_DONE) { sqlite3_finalize(compiledStatement); } } sqlite3_close(database);
我已经阅读了几篇关于类似错误的帖子,但我尝试过的所有内容都没有对我有用......我也尝试过,NSString *filePath = [[NSBundle mainBundle] pathForResource:@"testDatabase" ofType:@"sqlite"];
但它是空的,并且在模拟器中多次低估和重新部署我的应用程序......
提前致谢