Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C++对SQLite列中的“值不存在”进行检查_C++_Sqlite - Fatal编程技术网

如何使用C++对SQLite列中的“值不存在”进行检查

如何使用C++对SQLite列中的“值不存在”进行检查,c++,sqlite,C++,Sqlite,我有一个具有以下架构的表站点代码: CREATE TABLE SiteCode( ID INTEGER PRIMARY KEY, Code TEXT(3) UNIQUE NOT NULL DEFAULT 0); 通过下面的代码,我可以打开一个数据库&访问数据库的元素并完美地执行查询 现在我想添加一个小代码段,它可以检查用户希望删除的元素是否存在 例如:假设表SiteCode在代码列中有以下条目:400、401、402和403,并且用户输入444作为删除查询的输入,那么它将返回一个错误 目前,如

我有一个具有以下架构的表站点代码:

CREATE TABLE SiteCode(
ID INTEGER PRIMARY KEY,
Code TEXT(3) UNIQUE NOT NULL DEFAULT 0);
通过下面的代码,我可以打开一个数据库&访问数据库的元素并完美地执行查询

现在我想添加一个小代码段,它可以检查用户希望删除的元素是否存在

例如:假设表SiteCode在代码列中有以下条目:400、401、402和403,并且用户输入444作为删除查询的输入,那么它将返回一个错误

目前,如果用户输入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);

}
使用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;
}

发出相应的SELECT请求以测试行是否存在@基本查询是删除。如何提供SELECT请求并获得与DELETE相同的输出?请详细说明。从ID=444的站点代码中选择count*;如果count==1,则确定删除,否则有问题。@BasileStarynkevitch-我明白了。你的意思是我可以使用:从SiteCode中选择EXISTSELECT*,其中CODE=@CODE;如果上述结果为“0”,则该记录不存在。如果结果为“1”,则记录存在。我所需要做的就是捕获上述SELECT EXIST查询的输出。对吧???@RichardCriten:好的。这也是可能的。我也会试试这个。非常感谢,谢谢。对于给定的问题,这是一个更好的方法。我将接受这一方法作为我问题的解决方案。