2011-08-05 36 views
0

エラーメッセージは次のとおりです。私はすでに、インサートをテストしてみたSQLiteの挿入問題が

「挿入時にエラー」:キャッチされない例外により「NSInternalInconsistencyException」、理由にアプリを終了

私のDB上でSQLiteManagerとそれは正常に動作します。

これは私のコードです:

-(void) insertImage:(int) idImage 
       title:(NSString *) title 
     description:(NSString *) desc 
       URL:(NSString *) URL 
      ImageURL:(NSString *) imageURL 
       date:(NSString *) date{ 

    char *errorMsg; 
    sqlite3 *database; 

    if (sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) { 

     NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO tb_test VALUES(\'?\', \'?\', \'?\', \'?\', \'?\', \'?\');"]; 
     sqlite3_stmt *stmt; 

     sqlite3_exec(database, "BEGIN", 0, 0, 0); 

     if (sqlite3_prepare_v2(database, [insertSQL UTF8String], -1, &stmt, nil) == SQLITE_OK) { 

      sqlite3_bind_int(stmt, 1, idImage); 
      sqlite3_bind_text(stmt, 2, [title UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 3, [desc UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 4, [URL UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 5, [iamgeURL UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 6, [date UTF8String], -1, NULL); 
     } 


//  NSLog(@"sqlite3_step(stmt) = %d", sqlite3_step(stmt)); 

     if (sqlite3_step(stmt) != SQLITE_DONE) { 
      NSAssert1(0, @"Error on insert", errorMsg); 
     } 

     sqlite3_finalize(stmt); 

     sqlite3_exec(database, "COMMIT", 0, 0, 0); 
     sqlite3_close(database); 

    } 
} 

誰かが私を助けることができますか?

ありがとうございます!

+0

なぜ手作業でSQLを書いていますか?時間の無駄。少なくともFMDBを使用してください。より良い解決策は、Core Dataを直接使用することです(将来的にはiCloudの統合も向上します)。 – bbum

+0

私は最初のアプリケーションであるため、これを使用しましたeプログラミングを始める前にコアデータについてはわかりませんでした... btwこれはアンドロイドに作られたアプリケーションとほぼ同じアプリケーションです。 SQLiteも。 – jMelnik

+0

携帯性はSQLiteを直接使用する理由の1つですが、それでもiCloudとの統合によってコアデータにつながる可能性があります。 – bbum

答えて

0

私は100%ではありませんが、あなたのトークンの周りに'を置くべきではないと思います。したがって、これを試してみてください。

NSString *insertSQL = @"INSERT INTO tb_test VALUES(?, ?, ?, ?, ?, ?);"; 

sqlite3_bind_text SQLiteは適切なエスケープ/引用を実行します。

+0

いいえ...これはエラーではありません...私はまだステートメントでデータベースに何も挿入できません... – jMelnik