写入SQLite数据库。奇怪的东西

时间:2012-04-01 16:45:56

标签: objective-c sdk sqlite

我正在使用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);
    }

2 个答案:

答案 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等)。这将在使用数据库时打印确切的错误消息。