如何使用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:好的。这也是可能的。我也会试试这个。非常感谢,谢谢。对于给定的问题,这是一个更好的方法。我将接受这一方法作为我问题的解决方案。