1

SQLITE3iPhoneアプリケーションのデータベース操作に使用しています。

データベースに2つのテーブルがあり、さまざまな状況で2つのテーブルに挿入したいと思います。

私の問題は、初めて挿入操作が正常に機能することです。別のテーブルに挿入しようとすると、値は最後に挿入されたテーブルに挿入されます。

Table1の私のコードは次のとおりです。

-(void)addToTable1

{

    if(addStmt == nil) {
        const char *sql = "insert into Table(T1_Name) Values(?)";
        if(sqlite3_prepare_v2(database, sqlCurrency, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }

    sqlite3_bind_text(addStmt, 1, [T1_Name UTF8String], -1, SQLITE_TRANSIENT);

    if(SQLITE_DONE != sqlite3_step(addStmt))
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    else
        rowID = sqlite3_last_insert_rowid(database);

    sqlite3_reset(addStmt);
    sqlite3_close(database);
} 

Table2のコードは次のとおりです。

-(void)addToTable2
{
    if(addStmt == nil) {
        const char *sql = "insert into Table2(T2_Name) Values(?)";
        if(sqlite3_prepare_v2(database, sqlWeight, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }
    sqlite3_bind_text(addStmt, 1, [T2_Name UTF8String], -1, SQLITE_TRANSIENT);

    if(SQLITE_DONE != sqlite3_step(addStmt))
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    else
        rowID = sqlite3_last_insert_rowid(database);

    sqlite3_reset(addStmt);
    sqlite3_close(database);

}

なぜそれが起こっているのか私には何の手がかりも得られていません。

4

1 に答える 1

1

解放した後にリセットする必要がありaddStmtます。そうしないと、チェックによって新しいステートメントが使用できなくなります。nilif(addStmt == nil)

さらに、データベースを閉じる前にsqlite3_finalizeではなくを使用する必要があります。sqlite3_reset

于 2012-11-02T08:36:38.143 に答える