2012-03-07 60 views
0

我試圖插入此sqlite的插入把值代入錯場

- (void)insertBlogStory:(NSString *)storyTitle link:(NSString *)link storyDescription:(NSString *)storyDescription storyHTML:(NSString *)storyHTML pubDate:(NSString *)pubDate blog:(NSString *)blog { 

    NSLog(@"storyTitle %@",storyTitle); 
    NSLog(@"link %@",link); 
    NSLog(@"storyDescription %@",storyDescription); 
    NSLog(@"storyHTML %@",storyHTML); 
    NSLog(@"pubDate %@",pubDate); 
    NSLog(@"blog %@",blog); 

    if(addStmt == nil) { 

     const char *sql = "insert into contents (storyTitle, link, storyDescription, storyHTML, pubDate, blog, read) VALUES (?, ?, ?, ?, ?, ?, ?)"; 

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

    sqlite3_bind_text(addStmt, 1, [storyTitle UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 2, [link UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 3, [storyDescription UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 4, [storyHTML UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 5, [pubDate UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 6, [blog UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_int(addStmt, 7, 0); 

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

    sqlite3_reset(addStmt); 


} 

打印出正確的價值觀被送到methiod

storyTitle -> Converged Security 
link -> http://...converged-security.html 
storyDescription -> Cyber-crime is not new....etc 
storyHTML -> <p>Cyber-crime is not new....etc 
pubDate -> Thu, 01 Sep 2011 10:52:57 +0100 
blog -> Business continuity 

SQLite的表看起來像這樣

TABLE "contents" (
"id" INTEGER PRIMARY KEY, 
"storyTitle" TEXT, 
"link" TEXT, 
"storyDescription" TEXT, 
"storyHTML" TEXT, 
"pubDate" DATETIME, 
"blog" TEXT, 
"read" INTEGER, 
"storyVideo" TEXT, 
"storyVideoThumb" TEXT, 
"storyAudio" TEXT, 
"issueA" TEXT, 
"industryA" TEXT, 
"serviceA" TEXT, 
"contactName" TEXT, 
"contactPhone" TEXT, 
"contactAddress" TEXT, 
"contactPhrase" TEXT, 
"contactPhraseEmail" TEXT, 
"contactPhraseName" TEXT 
); 

但是這是什麼插入

"storyTitle" correct string 
"link" correct string 
"storyDescription" correct string 
"storyHTML" correct string 
"pubDate" correct string 
"blog" is always NULL 
"read" is always NULL 


"storyVideo" gets the blog string (Business continuity) 
"storyVideoThumb" gets the read value (0) 

爲什麼它將最後兩個值插入錯誤的字段?

TIA

+0

我對objectivec一無所知,但是你是否在其他地方聲明瞭'addStmt'(它看起來很像它有某種全局的靜態作用域)?如果是這樣,你確定它沒有被定義在別的地方嗎? – 2012-03-07 02:48:27

+0

static sqlite3_stmt * addStmt = nil;我已經修改了這個問題以顯示完整的輸出。這個插入的工作原理只是最後兩個值進入了錯誤的字段 – JulianB 2012-03-07 02:52:35

+0

並且您沒有任何其他類似的插入例程也使用addStmt? – 2012-03-07 02:56:26

回答

0

爲名利和榮耀(和分):

addStmt看起來是靜態的和/或全球性的。我猜你會在其他地方使用相同的變量名稱,但插入語句略有不同。