当我收到此错误时,我正在执行下面提到的填充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);
}
}
答案 0 :(得分: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];
在第一行的末尾,你有一个反斜杠\
,我认为它会被解释为一个导致无效查询的字符串值。 (检查你的日志?)
答案 1 :(得分: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;
}
} `