我正在使用C ++解释器(ROOT,CERN框架)来循环访问多个mySQL表。每当我查询一个不存在的表时,程序都会对我退出:
for (int run = 19000; run < 22000; run ++) {
s << run;
num = s.str();
schema = "run_0"+num+"_R007";
s.str("");
//creating our query
query = "select distinct *whatever* from "+schema+".kTrack;";
res = conPtr->Query(query);
conPtr->Close();
//Here is where I don't know what to do:
if (*success*) {
do stuff
}
else {
do stuff
}
}
如果表返回0行,我没有问题,如果表不存在,我有问题。
我的代码有什么问题?
答案 0 :(得分:1)
假设conPtr
是指向TMySQLServer
对象的指针,则TMySQLServer::Query()
的ROOT文档说:
如果成功,则返回指向
TSQLResult
对象的指针,否则返回0。。结果对象必须由用户删除。
因此Query()
在失败时会返回NULL指针。
此外,由于循环不会在每次迭代中重新打开新的数据库连接,因此,在完成对它的查询之后,才应该调用conPtr->Close()
。
尝试更多类似的方法:
for (int run = 19000; run < 22000; run ++) {
s << run;
num = s.str();
schema = "run_0"+num+"_R007";
s.str("");
//creating our query
query = "select distinct *whatever* from "+schema+".kTrack;";
res = conPtr->Query(query);
if (res) {
// use res as needed...
delete res;
}
else {
// ...
}
}
conPtr->Close();