开发者

How to insert an array into a SQLite database?

开发者 https://www.devze.com 2023-04-03 04:27 出处:网络
I\'m trying to insert an array into a SQLite database and I\'m having difficulties getting the array variables to insert.

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);
0

精彩评论

暂无评论...
验证码 换一张
取 消