エラーメッセージは次のとおりです。私はすでに、インサートをテストしてみた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);
}
}
誰かが私を助けることができますか?
ありがとうございます!
なぜ手作業でSQLを書いていますか?時間の無駄。少なくともFMDBを使用してください。より良い解決策は、Core Dataを直接使用することです(将来的にはiCloudの統合も向上します)。 – bbum
私は最初のアプリケーションであるため、これを使用しましたeプログラミングを始める前にコアデータについてはわかりませんでした... btwこれはアンドロイドに作られたアプリケーションとほぼ同じアプリケーションです。 SQLiteも。 – jMelnik
携帯性はSQLiteを直接使用する理由の1つですが、それでもiCloudとの統合によってコアデータにつながる可能性があります。 – bbum