1

i am trying to insert into sqlite database using objective c, the following is my code:

-(void)insertCustomer:(CustomerDetails *)cd{

CustomerDetails *cDetails=[[CustomerDetails alloc] initWithIdNumber:cd.idNumber name:cd.name surname:cd.surname];

NSString *name= cDetails.name;
NSString *surname=cDetails.surname;
NSString *idNumber=cDetails.idNumber;


NSString *insertQuery=[NSString stringWithFormat:@"INSERT INTO CUSTOMER_DETAILS(Name,Surname,ID_Number) VALUES(?,?,?);"];
sqlite3_stmt *insertStatement;
sqlite3_prepare_v2(database, [insertQuery UTF8String], 1, &insertStatement, NULL);

sqlite3_bind_text(insertStatement, 1,[name UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(insertStatement, 2,[surname UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(insertStatement, 3,[idNumber UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_step(insertStatement);
sqlite3_finalize(insertStatement);
sqlite3_close(database);

}

this is not inserting anything, also when i debug insertStatement seems to be null i am new to objective c so would appreciate any help :)

Thanks

4

1 回答 1

2

第三个参数sqllite3_prepare_v2是从 SQL 语句中读取的字节数。由于您传递 1,因此读取了一个字节,换句话说,您正在尝试执行 SQL 语句"I"。这是行不通的,并且sqllite_prepare_v2可能会失败,因此没有分配任何东西insertStatement- 但由于您没有检查错误代码的返回值,您的代码只会继续。

您可以传递 -1 以读取准备函数,直到 UTF8 字符串的空终止符。换句话说,这应该有效:

sqlite3_prepare_v2(database, [insertQuery UTF8String], -1, &insertStatement, NULL);

此外,在代码中使用 sqllite API 时,您确实应该检查错误;这可能会避免或解释未来的其他问题。根据文档:

成功时,sqlite3_prepare() 系列例程返回 SQLITE_OK;否则返回错误代码。

于 2012-09-02T16:05:34.483 回答