我正在尝试将数组插入到SQLite数据库中,并且我很难将数组变量插入。
如何从数组中获取变量(username& fullName)以插入数据库?
以下是错误消息:
Property 'username' not found on object of type 'NSString *'
Property 'fullName' not found on object of type 'NSString *'
这是我的代码......
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 UTF8String], -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);
}`
答案 0 :(得分:2)
这段代码与启动事务并提交它一起工作正常:
// 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);
========== [您上面的帖子中的代码来到这里] =============
// 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);