2012-04-01 12 views
2

私はSQLiteデータベースを使用しています。問題は、データがベースに書き込まれないということです。 NSLogは私に "All ok"を表示し、insertSQLも正しいですが、データベースのレコードはまだ発生していません。私のコード:SQLiteデータベースへの書き込み。奇妙なもの

-(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

あなたが探しているデータベース。アプリDB? –

答えて

1

たデータベースでは、あなたが探していますか?アプリDB?

あなたはレコードの数をチェックすることができます、単にレコードを数えますか?

SELECT COUNT(*)your_table_name

FROM私はあなたがそれを設定していないが、初期化され、あなたの_textField.textと日付の任意の値を持っているかどうかを疑います。

BlogDatabase.MessagesDataではなく、main.MessagesDataを使用する必要があります。

まず、プレーン端末にNSLogというinsertQueryを実行しようとします。 sqlite3 [app_db_path] /BlogDatabase.sqlite

+0

データベース名はBlogDatabase.sqlです。 MessagesDataという名前のテーブルがあります。そこにはすでに2つのレコードがあり、 'SELECT count(*)FROM your_table_name'は私にこのカウントを示しています。 '_text.Field.text'のテキストはiPhoneのキーボードからのものです(100%の値が存在します)。 NSLogからは、 '' MessageData "(" MessageText "、" MessageDate ")の値( 'Some new message'、 '2012-04-01 17:11:13 +0000');'と 'すべてOKです。 – RomanHouse

+0

次に、** BlogDatabase.MessagesData **はmain.MessagesDataではなく使用してください。そして、最初にプレーン・ターミナルでNSLogを実行するinsertQueryを実行してみてください。 sqlite3 BlogDatabase.sqlite –

+0

「BlogDatabase.MessagesData'」に変更されました。この場合、add文の作成中にエラーが発生しました。 'いいえそのようなテーブル:BlogDatabase.MessagesData'''。古いバージョンはTerminalからうまく動作します。 – RomanHouse

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]; 
    } 

はまた、( "エラー '%s' は"、sqlite3_errmsg(データベース)@)のNSLogを置きます。各データベース操作が完了した後(すなわち、後、sqlite3_step、sqlite3_prepareなど)。これにより、データベースの使用中に正確なエラーメッセージが表示されます。

+0

自分のコードを変更してNSLogを入れてください。すべての変更、すべてのdatabese操作が正常に動作します。 – RomanHouse

関連する問題