Jestem obecnie w następujący sposób jako część mojej aplikacji iPhoneSQLite zachowania na INSERT na iPhone
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"cities.sqlite"];
sqlite3 *database;
if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
const char *sqlStatement = "insert into table (name, description, image) VALUES (?, ?, ?)";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
sqlite3_bind_text(compiledStatement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement, 2, [description UTF8String], -1, SQLITE_TRANSIENT);
NSData *dataForImage = UIImagePNGRepresentation(image);
sqlite3_bind_blob(compiledStatement, 3, [dataForImage bytes], [dataForImage length], SQLITE_TRANSIENT);
}
if(sqlite3_step(compiledStatement) != SQLITE_DONE) {
NSLog(@"Error: %s", sqlite3_errmsg(database));
} else {
NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database));
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
Co mnie mylące jest to, że jeśli wezmę sekcję,
if(sqlite3_step(compiledStatement) != SQLITE_DONE) {
NSLog(@"Error: %s", sqlite3_errmsg(database));
} else {
NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database));
}
The INSERT nie jest zapisywany w bazie danych i ginie. Przypuszczam, że brakuje tu czegoś oczywistego?
Jestem ciekaw waszego rozumu (y) nie używając danych Core. – nicerobot
Zwykle używam obwolut wokół SQLite lub, częściej niż obecnie, z Core Data. Jednak chciałem wiedzieć, jak korzystać z biblioteki bezpośrednio, więc ... –