想象一下,我有以下功能。如果参数或异常无效,则函数必须以空rowset
退出。
rowset<row> SelectAllFromTable(string tableName)
{
session sql(odbc, "...");
// if parameters are not valid -> return empty rowset<row>
if (tableName == "")
{
// query that returns 0 result
rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
return res;
}
string query = "SELECT * FROM " + tableName;
try
{
rowset<row> rs = sql.prepare << query;
return rs;
}
catch (exception const &e)
{
cerr << "Error: " << e.what() << endl;
// query that returns 0 result
rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
return res;
}
// query that returns 0 result
rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
return res;
}
我上面写的解决方案有效但我的问题是:是否有更好的方法可以使用SOCI返回空行集?
答案 0 :(得分:1)
由于文档没有多少提供给我,所以我查看了行集Header:它没有默认的构造函数,也没有设置迭代器的公共方法,因此你不能得到一个空行集你自己。
尽管为什么不使用对这种情况来说非常完美的例外情况。只是没有捕获soci_error异常,然后调用者SelectAllFromTable
可以捕获它。这将有许多优点: