我正在使用SQLite数据库。问题是数据没有写入base。 NSLog向我显示“一切正常”,insertSQL
也是正确的,但数据库中的记录仍未发生。我的代码:
-(void)saveMessage:(id)sender
{
sqlite3 *database;
databaseName = @"BlogDatabase.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:@"insert into \"main\".\"MessagesData\" ( \"MessageText\", \"MessageDate\") values ( '%@', '%@');", _textField.text, [[NSDate alloc] init]];
NSLog(@"%@", insertSQL);
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, insert_stmt, -1, &compiledStatement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}else{
if (sqlite3_step(compiledStatement) == SQLITE_DONE)
{
NSLog(@"All ok");
} else {
NSLog(@"FAIL");
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
答案 0 :(得分:1)
您在寻找哪个数据库? app db?
您可以查看记录的数量,只计算记录。
SELECT count(*)FROM your_table_name
我怀疑你的_textField.text中是否有任何值,并且你只是初始化没有设置它的日期。并假设一切正常,那么
你应该使用 BlogDatabase.MessagesData 而不是main.MessagesData。
首先尝试运行你在普通终端中使用NSLog的insertQuery。 sqlite3 [app_db_path] /BlogDatabase.sqlite
答案 1 :(得分:1)
您必须修改以下代码。
-(void)saveMessage:(id)sender
{
sqlite3 *database;
databaseName = @"BlogDatabase.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager fileExistsAtPath:file];
if(!success) {
databasePath = [[NSBundle mainBundle] pathForResource:databaseName ofType:nil];
}
还放NSLog(@“Error。'%s'”,sqlite3_errmsg(数据库));每个数据库操作完成后。 (即;之后,sqlite3_step,sqlite3_prepare等)。这将在使用数据库时打印确切的错误消息。