1

我正在使用 VisualStudio 12 开发一个应用程序。在那个应用程序中我需要做一些 mySql 调用,我有那个代码:

sql::Statement *stmt = db->global->createStatement();
sql::ResultSet *res = stmt->executeQuery("SELECT * FROM `tbl_jobs` WHERE name = 'maintenance';");
Server->maintenance = (res->getString("data") == "on")? true : false;

查询没问题,在 Navicat 上运行良好,但在:

res->getString("data")

曾经抛出那个错误:

... 处未处理的异常:Microsoft C++ 异常:内存位置处的 sql::InvalidArgumentException ....

如果我完成 sql::SQlException throw 我得到这个日志:

错误:SQLException in .... 函数:第 33 行的主错误:MySQL_ResultSet::getString:无法获取,因为不在结果集上(MySql 错误代码:1544116026,SqlState:MySQL_ResultSet::getString:无法获取,因为没有在结果集上)

我了解 sql::ResultSet 没有任何数据,但如果我打印 res->rowsCount() 说我是 1 行...我尝试使用 res->first(),但会引发随机错误。

有任何想法吗?:C

4

2 回答 2

2

您必须调用 next() 或类似方法,以便您的结果集指向集合中的第 n 个结果

如果您的结果集为空,则调用 getString() 将失败。在继续之前检查结果。就像是:

if(!res->next())
  return; //Handle Failiure

在尝试对结果进行操作之前执行此操作

在这里,他们交替使用 while 循环。

于 2013-06-25T10:39:21.880 回答
1

res->next()在你的第一个getString(...)函数之前调用

于 2014-10-05T17:45:12.407 回答