3

次のコードでは、ライブラリ ルーチンの呼び出し順序が間違っているというエラーが表示されますが、どこに問題があるのか​​説明できません。何か案は ?

- (BOOL)insertProduct:(Product *)product inOrder:(Order *)order withAmount:(int)amount
    {
        BOOL ok = NO;
        sqlite3_stmt *statement;

        const char *dbpath = [_databasePath UTF8String];

        if (sqlite3_open(dbpath, &_database) == SQLITE_OK)
        {
            NSString * insertSQL;
            int amount = [self getAmountForProduct:product inOrder:order];
            NSLog(@"%i", amount);

            if (amount != -1)
            {
                insertSQL = [NSString stringWithFormat: @"UPDATE ARTICOLIPERORDINE SET quantita = %i WHERE ordine = %i AND articolo = '%@'", amount, order.idOrdine, product.codice];
            }
            else
            {
                insertSQL = [NSString stringWithFormat: @"INSERT INTO ARTICOLIPERORDINE (ordine, articolo, quantita) VALUES(%i, '%@', %i)",order.idOrdine, product.codice, 1];
            }

            NSLog(@"%@", insertSQL);
            const char *insert_stmt = [insertSQL UTF8String];

            if (sqlite3_prepare_v2(_database, insert_stmt, -1, &statement, NULL) == SQLITE_OK)
            {
                if (sqlite3_step(statement) == SQLITE_DONE)
                {
                    ok = YES;
                }
                else
                {
                    ok = NO;
                    NSLog(@"sqlite3 ERROR %s: %@",sqlite3_errmsg(_database), insertSQL);
                }

                sqlite3_finalize(statement);
                sqlite3_close(_database);
            }
            else
            {
                NSLog(@"Error prepare = %s", sqlite3_errmsg(_database));
            }

        }

        return ok;
    }

log print Error prepare = ライブラリ ルーチンが順不同で呼び出されました

4

1 に答える 1

2

私には1つのアプローチがあります。この前に、接続のオープン、クローズ、ファイナライズなどのすべての SQL クエリが完了していることを確認してください。

実際のクエリをコードに実行する前に、そのクエリを任意のデータベース ブラウザで実行します。クエリに何が欠けているかがわかります。

私の場合のように、列名を間違ってクエリに入れてコードを実行すると、エラーが複数回発生しました。すべてのコードを注意深く確認し、クエリをデータベース ブラウザで実行したところ、間違いが見つかりました。

于 2016-10-06T06:22:19.713 に答える