0
Ich versuche, eine BLOB-Daten von SignatureView mit diesem Code einfügen, aber wenn ich tatsächlich die Datenbank durchsuchen gibt es null anstelle von Daten. Mein Signaturtabellenschema ist unten angegeben.iOS SQLite Blob Daten speichern NULL
Create Tabellenzeichen (id Integer Primärschlüssel AUTOINCREMENT, Bildblob, functionid integer);
-(void)storeImageData:(NSData *)imageData withInvoiceID:(NSInteger)invoiceID{
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"database.sqlite3"];
const char *dbpath = [dbPath UTF8String];
sqlite3 *contactDB;
sqlite3_stmt *statement;
NSLog(@"%@",dbPath);
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
int invoiceIDINT = (int)invoiceID;
//
NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO sign (image,invoiceid) VALUES (?,%d)", invoiceIDINT];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
sqlite3_bind_blob(statement, 2, [imageData bytes], [imageData length], SQLITE_TRANSIENT);
sqlite3_step(statement);
} else {
const char *Error = sqlite3_errmsg(database);
NSString *error = [[NSString alloc]initWithUTF8String:Error];
UIAlertView *view = [[UIAlertView alloc]initWithTitle:@"Error2" message:[NSString stringWithFormat:@"Last inserted ID: %@",error] delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil];
[view show];
}
sqlite3_finalize(statement);
sqlite3_close(contactDB);
}
}
'sqlite3_finalize()' darf auf einer NULL-Anweisung aufgerufen werden. –
@ CL. Aber warum? Sie müssen nur eine geöffnete Datenbank schließen. Sie müssen nur eine vorbereitete Aussage abschließen. – rmaddy
Es kann Situationen geben, in denen das bedingungslose Aufrufen von 'sqlite3_finalize' einfacher ist. –