2009-05-20 25 views
-5
(BOOL) addticket { 
    NSString *[email protected]"max"; 
    NSString *[email protected]"tvm"; 
    sqlite3 *database; 
    databaseName = @"smbhDB.sql"; 
    sqlite3_stmt *addStatement ; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
    if(addStatement == nil) { 
     const char *sql ="insert into tickets (venue, event,) Values (?,?)"; 

     if(sqlite3_prepare_v2(database, sql, -1, &addStatement, NULL) != SQLITE_OK) 
      NSAssert1(0, @"444 Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
    } 

    sqlite3_bind_text(addStatement, 1, [venue UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStatement, 2, [event UTF8String], -1, SQLITE_TRANSIENT); 

    if(SQLITE_DONE != sqlite3_step(addStatement)) 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 

    sqlite3_reset(addStatement); 
... 

此代碼無法正常工作。請有人幫我糾正它。如果有人可以發佈樣本代碼,請上傳。sqllite3準備插入查詢在iphone編程

+4

誰在上帝的名字upvoted這? – 2009-05-20 04:50:35

回答

1

我不是100%確定,因爲沒有提供錯誤詳細信息,但它看起來像addStatement未被初始化。當Objective-C被分配到堆棧時,是否將所有指針初始化爲0?我知道在Linux中這是行不通的。

也許試試這個:sqlite3_stmt *addStatement = nil;

我想知道,你爲什麼連檢查addStatement == nil?沒有理由檢查它,因爲你必須在每種情況下初始化它。

總之,重新寫像這樣:

(BOOL) addticket { 
    NSString *[email protected]"max"; 
    NSString *[email protected]"tvm"; 
    sqlite3 *database; 
    databaseName = @"smbhDB.sql"; 
    sqlite3_stmt *addStatement ; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    const char *sql ="insert into tickets (venue, event,) Values (?,?)"; 

    databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 

    /* this is no longer conditional code */ 
    if(sqlite3_prepare_v2(database, sql, -1, &addStatement, NULL) != SQLITE_OK) 
     NSAssert1(0, @"444 Error while creating add statement. '%s'", sqlite3_errmsg(database)); 

    sqlite3_bind_text(addStatement, 1, [venue UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStatement, 2, [event UTF8String], -1, SQLITE_TRANSIENT); 

    if(SQLITE_DONE != sqlite3_step(addStatement)) 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 

    sqlite3_reset(addStatement); 
...