2011-08-05 102 views
0

的錯誤信息是:SQLite的插入問題

終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「在插入錯誤」

我已經測試插件在我的數據庫與SQLiteManager和它工作正常。

這是我的代碼:

-(void) insertImage:(int) idImage 
       title:(NSString *) title 
     description:(NSString *) desc 
       URL:(NSString *) URL 
      ImageURL:(NSString *) imageURL 
       date:(NSString *) date{ 

    char *errorMsg; 
    sqlite3 *database; 

    if (sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) { 

     NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO tb_test VALUES(\'?\', \'?\', \'?\', \'?\', \'?\', \'?\');"]; 
     sqlite3_stmt *stmt; 

     sqlite3_exec(database, "BEGIN", 0, 0, 0); 

     if (sqlite3_prepare_v2(database, [insertSQL UTF8String], -1, &stmt, nil) == SQLITE_OK) { 

      sqlite3_bind_int(stmt, 1, idImage); 
      sqlite3_bind_text(stmt, 2, [title UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 3, [desc UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 4, [URL UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 5, [iamgeURL UTF8String], -1, NULL); 
      sqlite3_bind_text(stmt, 6, [date UTF8String], -1, NULL); 
     } 


//  NSLog(@"sqlite3_step(stmt) = %d", sqlite3_step(stmt)); 

     if (sqlite3_step(stmt) != SQLITE_DONE) { 
      NSAssert1(0, @"Error on insert", errorMsg); 
     } 

     sqlite3_finalize(stmt); 

     sqlite3_exec(database, "COMMIT", 0, 0, 0); 
     sqlite3_close(database); 

    } 
} 

有人能幫助我嗎?

在此先感謝!

+0

你爲什麼手工編寫SQL?浪費時間。至少使用FMDB。更好的解決方案是直接使用核心數據(並且將來也會爲您提供更好的iCloud集成)。 – bbum

+0

我剛剛使用過,因爲這是我的第一個應用程序e我開始編程之前我不知道核心數據......順便說一句,這是一個應用程序,幾乎完全相同的一個android製作,並且我用SQLite也是如此。 – jMelnik

+0

可移植性是直接使用SQLite的一個原因,但即使如此,iCloud集成可能會將您帶到Core Data。 – bbum

回答

0

我不是100%,但我認爲你不應該把'放在你的代幣周圍。因此,您可能需要試一試

NSString *insertSQL = @"INSERT INTO tb_test VALUES(?, ?, ?, ?, ?, ?);"; 

當您將例如它SQLite執行所需的適當的轉義/引用。

+0

不...這不是錯誤...我仍然無法在報表中插入任何東西...... – jMelnik