2015-02-23 50 views
2

我有一個表「SITECODE」與下面的模式「值不存在」 SQLite中柱:如何檢查是否使用C++

CREATE TABLE SiteCode(
ID INTEGER PRIMARY KEY, 
Code TEXT(3) UNIQUE NOT NULL DEFAULT 0); 

通過下面的代碼,我可以打開一個DB &訪問DB的元素並完美地執行查詢執行。

現在我想添加一個小的代碼片段,它可以檢查用戶是否希望刪除的元素是否存在。

例如:假設表SITECODE具有以下在代碼輸入柱:,,和和用戶輸入作爲輸入到刪除查詢然後它應該返回一個錯誤。

目前,如果用戶輸入444 作爲輸入到查詢則該查詢被而不檢查代碼柱且無任何錯誤成功執行。

我該如何解決這個問題。請幫助。

void DELETE_Site_Code() 
{ 
    int CodeA; 

    int rc = sqlite3_open("/DBsqlite3/empdbv3.db", &db); 

    if (rc != SQLITE_OK) {  
     cerr << "Cannot open database [ " << sqlite3_errmsg(db) << " ]" << endl;   
     sqlite3_close(db);   
    } 


    sql = "DELETE FROM SiteCode WHERE Code= @Code;"; 

    rc = sqlite3_prepare_v2(db, sql, -1, &stmt4, 0); 

    if(SQLITE_OK != rc) { 
     cerr << "Failed to PREPARE DELETE statement for SiteCode Table [ " << sqlite3_errmsg(db) << " ]" << endl; 
     sqlite3_close(db); 
     exit(1); 
    } 

    else{ 
     int Code_x = sqlite3_bind_parameter_index(stmt4, "@Code"); 

     cout<< "Enter the Site Code That you wish to DELETE from table-SiteCode\n"<< endl; 
     cin>>CodeA;              

     if(cin.fail()) { 
      cout<<"\nPlease enter only digits\n"<<endl; 
     } 
     else { 
      if((CodeA >= 000) && (CodeA <= 998)) { 
       sqlite3_bind_int(stmt4, Code_x, CodeA); 
      } 
      else { 
       cout<< "Valid Site Code Should be between 000 to 998\n" <<endl; 
      } 
     } //else loop of (cin.fail) ends here 
    } 

    int step = sqlite3_step(stmt4); 

    if(SQLITE_DONE != step) { 
     cout<<"\nERROR while inserting into table\n"<< endl; 
    } 
    else { 
     cout<<"\nRecord DELETION completed"<<endl; 
    } 

    if(step == SQLITE_ROW){ 
     cout<< sqlite3_column_text(stmt4, 0) << endl; 
     cout<< sqlite3_column_text(stmt4, 1) << endl; 
    } 


    sqlite3_finalize(stmt4); 
    sqlite3_close(db); 

} 
+0

發出相應的'SELECT'請求以測試是否此行存在! – 2015-02-23 08:12:36

+0

@BasileStarynkevitch查詢是DELETE。我如何提供SELECT請求並獲得與DELETE相同的輸出?你能否詳細說明一下。 – 2015-02-23 08:18:23

+1

'從SiteCode中選擇count(*),其中ID = 444;'如果count == 1,那麼可以刪除,否則會出錯。 – 2015-02-23 08:34:16

回答

0

使用sqlite3_changes()功能來查詢多少行受到了最近執行的查詢:

// ... 
int step = sqlite3_step(stmt4); 

if(SQLITE_DONE != step) { 
    cout<<"\nERROR while inserting into table\n"<< endl; 
} 
else if (sqlite3_changes(db) == 0) { 
    cout<<"\nNo records deleted"<<endl; 
} 
else { 
    cout<<"\nRecord DELETION completed"<<endl; 
} 
+0

謝謝。對於給定的問題,這是一個更好的方法。我會接受這個作爲我的問題的解決方案。 – 2015-02-24 05:45:15