0

当我收到此错误时,我正在执行下面提到的方法来填充 sqlite 表:

"DB SUPPORT - ERROR commentTable INSERT". 

关于我哪里出错的任何帮助?

代码:

(void) saveSales: (NSMutableArray*)aSalesArray
   {

    NSDate* now = [NSDate date];



  //////////////////////////////////////////////////////////////


    for(int i=0;i<[aSalesArray count];i++)
    {

        NSMutableDictionary *myDict = [aSalesArray objectAtIndex:i];

        NSString * fklItemID =[myDict valueForKey:@"fklItemD"];
        NSString * lSellingPrice = [myDict valueForKey:@"lSellingPrice"];
        NSString * lQuantity = [myDict valueForKey:@"lQuantity"];
        bool bLooseDraw = [myDict valueForKey:@"bLooseDraw"];
        bool bLooseDrawPacket = [myDict valueForKey:@"bLooseDrawPacket"];
        NSString *sDeviceUID = [myDict valueForKey:@"sDeviceUID"];

        NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp)\
                                   VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now];

        const char *sql = [selectSql UTF8String];


        NSLog(@"The SQl String is %@",selectSql);

        sqlite3_stmt *statement;


        // Prepare the statement to compile the SQL query into byte-code
        int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL);

         NSLog(@"The SQl String is %d",sqlResult);

        if (sqlResult== SQLITE_OK)
        {
            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                //BOOL ret = YES;
                NSLog(@"DB SUPPORT - commentTable INSERTED");
            }
            else
            {
                NSLog(@"DB SUPPORT - ERROR commentTable INSERT");
            }

        }
        else
        {
            NSLog(@"DB SUPPORT - Sql Preparing Error ( INSERT commentTable)");
        }

        sqlite3_finalize(statement);
    }
}
4

2 回答 2

0

我最终使用了下面的代码并且它有效。以防万一将来有人遇到类似的问题。

                                                                                                       `- (void) saveSales: (NSMutableArray*)aSalesArray

{

NSDate* now = [NSDate date];


for(int i=0;i<[aSalesArray count];i++)
{

    NSMutableDictionary *myDict = [aSalesArray objectAtIndex:i];

    NSString * fklItemID =[myDict valueForKey:@"fklItemD"];
    NSString * lSellingPrice = [myDict valueForKey:@"lSellingPrice"];
    NSString * lQuantity = [myDict valueForKey:@"lQuantity"];
    bool bLooseDraw = [myDict valueForKey:@"bLooseDraw"];
    bool bLooseDrawPacket = [myDict valueForKey:@"bLooseDrawPacket"];
    NSString *sDeviceUID = [myDict valueForKey:@"sDeviceUID"];

    NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp) VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now];

    const char *sql = [selectSql UTF8String];


    NSLog(@"The SQl String is %@",selectSql);

    sqlite3_stmt *statement;


    // Prepare the statement to compile the SQL query into byte-code
    int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL);

     NSLog(@"The SQl String is %d",sqlResult);

    sqlite3_step(statement);

    NSLog(@"Executed sqlite3_step ");

    //If the result is SQLITE_OK, we step through the results one row at a time using the sqlite3_step function:

    if ( sqlResult== SQLITE_OK) {
        // Step through the results - once for each row.
        NSLog(@"Record Updated");
        // Finalize the statement to release its resources
        sqlite3_finalize(statement);
    }

    else {
        NSLog(@"Problem with the database:");
        NSLog(@"%d",sqlResult);
    }
    //return products;

}

} `

于 2013-07-14T08:27:17.487 回答
0
    NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp)\
                               VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now];

在第一行的末尾有一个反斜杠\,我认为它会被解释为导致无效查询的字符串值。(检查你的日志?)

于 2013-07-13T18:12:10.483 回答