2012-03-07 61 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看起来是静态的和/或全球性的。我猜你会在其他地方使用相同的变量名称,但插入语句略有不同。