2012-12-24 69 views
-1

我有Sqllite更新聲明的問題,它不工作。我不知道爲什麼,因爲一切似乎都沒問題。錯誤代碼是0sqllite更新聲明不起作用

char *q; // query 
char fp[MAX_PATH]; 
q="UPDATE search SET ustat=1 WHERE fpath=?"; 
for(int i=0; i<=6; i++){ 
    if(sqlite3_prepare_v2(db, q, strlen(q), &pointer, 0) == SQLITE_OK){ 
     //cout<<"\n\n inside loop i values is "<<i<<"\n\n"; 
     snprintf(fp,MAX_PATH,xbx[i].fpaths,0); 
     sqlite3_bind_text(pointer, 1, fp, strlen(fp), 0); // file name 
     sqlite3_step(pointer); // prepare statemnt Ready 
     sqlite3_finalize(pointer); 
    } 
} 

我是用結構綁定文本聲明轉念一想,也許這個問題是由於結構,那麼我將其更改爲本地緩存,但沒有成功。

更新:我嘗試刪除循環和手動設置的東西,但它仍然沒有工作更新說明錯誤??????錯誤代碼0

if(sqlite3_prepare_v2(db, q, strlen(q), &pointer, 0) == SQLITE_OK){ 
         sqlite3_bind_text(pointer, 1, xbx[0].fpaths, sizeof(xbx[0].fpaths), 0); // file name 
         sqlite3_bind_text(pointer, 1, xbx[1].fpaths, sizeof(xbx[1].fpaths), 0); 
         sqlite3_bind_text(pointer, 1, xbx[2].fpaths, sizeof(xbx[2].fpaths), 0); 
         sqlite3_bind_text(pointer, 1, xbx[3].fpaths, sizeof(xbx[3].fpaths), 0); 
         sqlite3_bind_text(pointer, 1, xbx[4].fpaths, sizeof(xbx[4].fpaths), 0); 
         sqlite3_step(pointer); // prepare statemnt Ready 
         sqlite3_finalize(pointer); // delete prepared statement 
      } 
+2

將'sqlite_prepare_v2()'移到循環之外。 – 2012-12-24 20:01:35

+0

通過移動循環外部的sqlite_prepare_v2()....它崩潰它,我的值= 3 ....也ustat不更新到1 –

+0

當您將'sqlite3_prepare'移出循環,'sqlite3_finalize'必須是也移動了,你需要在每次迭代之後調用sqlite3_reset。另外,請檢查'sqlite3_step'的返回碼! –

回答

0

好,我找到了解決辦法這是由於SQLite的敲定聲明....檢查你可能錯過了所有程序,而不是放在源碼敲定聲明..所以問題就解決了:)

if(sqlite3_prepare_v2(db, q, strlen(q), &pointer, 0) == SQLITE_OK){ 
    //cout<<"\n\n inside loop i values is "<<i<<"\n\n"; 
    snprintf(fp,MAX_PATH,xbx[i].fpaths,0); 
    sqlite3_bind_text(pointer, 1, fp, strlen(fp), 0); // file name 
    sqlite3_step(pointer); // prepare statemnt Ready 
    sqlite3_reset(pointer); 
} 
    sqlite3_finalize(pointer); 

}