I'm trying to insert an array into a SQLite database and I'm having difficulties getting the array variables to insert.
How can I get variables from the array (username & fullName) to insert in the db?
Here are the error messages:
Property 'username' not found on object of type 'NSString *'
Property 'fullName' not found on object of type 'NSString *'
Here's my code...
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
NSMutableArray *items = result;
sqlite3_stmt *insert_statement;
// prepare the insert statement
const char*sql = "INSERT INTO people (username, fullName) VALUES(?,?)";
sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL);
// iterate over an array of dictionaries
for (NSString *str in items) {
// NSLog(@"%@",str);
// bind variables
sqlite3_bind_text(insert_statement, 1, [str.username UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert_statement, 2, [str.fullName UTF8Str开发者_Python百科ing], -1, SQLITE_TRANSIENT);
// insert fails
if (sqlite3_step(insert_statement) != SQLITE_DONE) {
NSLog(@"Insert failed: %s", sqlite3_errmsg(database));
}
// reset the statement
sqlite3_reset(insert_statement);
}
// release the statement
sqlite3_finalize(insert_statement);
}`
This code works well ok combined with starting a transaction and committing it:
// start transaction
sqlite3_stmt *begin_transaction_stmt;
const char *beginTrans = "BEGIN EXCLUSIVE TRANSACTION";
if (sqlite3_prepare_v2(database, beginTrans, -1, &begin_transaction_stmt, NULL) != SQLITE_OK) {
sqlite3_close(database);
return NO;
}
sqlite3_step(begin_transaction_stmt);
sqlite3_finalize(begin_transaction_stmt);
========== [your code from the post above comes here] =============
// commit transaction
sqlite3_stmt *end_transaction_stmt;
const char *endTrans = "COMMIT";
if (sqlite3_prepare_v2(database, endTrans, -1, &end_transaction_stmt, NULL) != SQLITE_OK) {
sqlite3_close(database);
return NO;
}
sqlite3_step(end_transaction_stmt);
sqlite3_finalize(end_transaction_stmt);
精彩评论