我有3个SQLite表。每个都有一个ID作为主键;如果我在向ID插入记录时提供NULL,它将自动递增密钥(至少这是SQLite文档所说的)。我试图将NULL插入到这个insert语句中,但它崩溃了('NSInvalidArgumentException',原因:' * - [NSPlaceholderString initWithFormat:locale:arguments:]:nil argument' )。这是语句的片段(dbCmd定义为NSString):
dbCmd = @"INSERT INTO CustData (ID, BUS_NAME, EMAIL, PHONE, SHOP_NAME, SHOP_ADDR1, SHOP_ADDR2, SHOP_CITY_STATE, SHOP_ZIP, "
"SHIP_NAME, SHIP_ADDR1, SHIP_ADDR2, SHIP_CITY_STATE, SHIP_ZIP, SALES_NAME, NOTES) VALUES('";
dbCmd = [dbCmd stringByAppendingFormat:NULL]; // <--------------------
dbCmd = [dbCmd stringByAppendingString: [methodParameters objectForKey: @"businessName"]];
dbCmd = [dbCmd stringByAppendingString: @"', '"];
dbCmd = [dbCmd stringByAppendingString: [methodParameters objectForKey: @"email"]];
如何解决此问题?
答案 0 :(得分:0)
来自sqlite docs:
如果在插入上没有指定ROWID,或者指定的ROWID的值为NULL,则会自动创建适当的ROWID。
http://www.sqlite.org/autoinc.html
如果您没有具体的理由指定ID,您可以简单地将其删除!