2

iOS の sqlite3 テーブルにプログラムで複数の行を挿入するにはどうすればよいですか? これは、現在のメソッドのコード スニペットです。

sqlite3 *database;

if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
    const char *sqlStatement = "insert into TestTable (id, colorId) VALUES (?, ?)";
    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        for (int i = 0; i < colorsArray.count; i++) {
            sqlite3_bind_int(compiledStatement, 1, elementId);
            long element = [[colorsArray objectAtIndex:i] longValue];
            sqlite3_bind_int64(compiledStatement, 2, element);
        }
    }

    if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
        sqlite3_finalize(compiledStatement);
    }
    else {
        NSLog(@"%d",sqlite3_step(compiledStatement));
    }
}
sqlite3_close(database);

この方法では、最初の行のみが挿入されます。各 'for' ループを行挿入にしたいことを sqlite に伝えるにはどうすればよいですか? これの例は見つかりませんでした...

ありがとう!

4

2 に答える 2

1

私はそれを機能させました、これは今私のコードです:

sqlite3 *database;

if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
    const char *sqlStatement = "insert into TestTable (id, colorId) VALUES (?, ?)";
    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        for (int i = 0; i < colorsArray.count; i++) {
            sqlite3_bind_int(compiledStatement, 1, elementId);
            long element = [[colorsArray objectAtIndex:i] longValue];
            sqlite3_bind_int64(compiledStatement, 2, element);

            if (sqlite3_step(compiledStatement) == SQLITE_DONE) {
                if (i == (colorsArray.count - 1))
                    sqlite3_finalize(compiledStatement);
                else
                    sqlite3_reset(compiledStatement);
            }
            else {
                NSLog(@"row insertion error");
            }
        }
    }
}
sqlite3_close(database);
于 2012-11-04T17:40:03.133 に答える
1

次のステートメントを実行する必要があります。

sqlite3_step(compiledStatement) == SQLITE_DONE

各挿入の後、コードでは、最後に一度だけ実行することがわかります。

于 2012-11-04T15:19:01.953 に答える