【发布时间】:2013-08-27 15:50:36
【问题描述】:
由于某种原因,我的应用似乎没有在 Documents 文件夹中创建数据库。我一直在关注这个视频教程 (http://www.youtube.com/watch?v=bC3F8a4F_KE)(它还有我下载的可用源代码 (https://github.com/iffytheperfect1983/sqliteTutorial),它可以完美地在模拟器上运行)。
我使用了一些 NSLog 语句来尝试查明问题。我意识到虽然“已声明”语句之前的所有代码都可以正常运行,但其余的 NSLog 语句并没有出现在控制台中。我在自己编写的代码和教程中的代码之间不知疲倦地来回查看,但无济于事。
这里是代码。
@interface ViewController () {
NSMutableArray *letterArray;
sqlite3 *letterDB;
NSString *dbPathString;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Set up
letterArray = [[NSMutableArray alloc]init];
[[self letterList] setDelegate:self];
[[self letterList] setDataSource:self];
// create or open database
[self createOpenDB];
// Display database
[self displayDB];
}
// Create/open database
- (void) createOpenDB {
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *docPath = [path objectAtIndex:0];
dbPathString = [docPath stringByAppendingPathComponent:@"letters.db"];
char *error;
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dbPathString]) {
const char *dbPath = [dbPathString UTF8String];
NSLog(@"Declared");
// create database here
if (sqlite3_open(dbPath, &lettersDB)==SQLITE_OK) {
NSLog(@"'If' statement is ok");
const char *sql_stmt = "CREATE TABLE IF NOT EXISTS LETTERS (ID INTEGER PRIMARY KEY AUTOINCREMENT, A TEXT, B TEXT, C TEXT, D TEXT, E TEXT, F TEXT, G TEXT)";
NSLog(@"Declared");
sqlite3_exec(lettersDB, sql_stmt, NULL, NULL, &error);
NSLog(@"Execution complete.");
sqlite3_close(lettersDB);
NSLog(@"Close complete.");
NSLog(@"Database creation successful.");
}
}
}
我该如何解决这个问题?提前谢谢你。
【问题讨论】:
-
当您遇到此类问题时,请检查错误。将
else添加到用于打开数据库的if语句中。记录sqlite_errmsg(). -
谢谢。我一定会牢记这一点。
标签: objective-c sqlite ios6.1