执行SQL查询¶
SQL查询语句允许应用程序基于指定的任何约束条件从数据库请求信息。查询后返回一个结果集。
本节包括以下主题:
- 使用结果集
- 指定查询
使用结果集¶
执行数据库查询时,会将查询结果放入一组称为结果集的行中。在ACCI中,SQL SELECT语句由Statement类的executeQuery方法执行。此方法返回表示查询结果的ResultSet对象。
ResultSet *rs = stmt->executeQuery("SELECT * FROM basket_tab");
在结果集中有了数据之后,就可以对其执行操作了。例如,假设您想打印这个表的内容。ResultSet的next()方法用于获取一行数据,getxxx()方法用于检索结果集的各个列,如下面的代码示例所示:
cout << "The basket has:" << endl;
while (rs->next())
{
string fruit = rs->getString(1); // 以string方式获取第一列的值
int quantity = rs->getInt(2); // 以int方式获取第二列的值
cout << quantity << " " << fruit << endl;
}
如果当前行的数据可用,则状态为DATA_AVAILABLE。读取所有数据后,状态更改为END_OF_FETCH。如果有任何输出流需要读取,则状态为STREAM_DATA_AVAILABLE,直到成功读取所有流数据为止。
指定查询¶
查询时可以绑定输入变量来指定查询的WHERE子句中的约束。例如,下面的程序只打印最小数量为4的项:
stmt->setSQL("SELECT * FROM basket_tab WHERE quantity >= :1");
int minimumQuantity = 4;
stmt->setInt(1, minimumQuantity); // set first parameter
ResultSet *rs = stmt->executeQuery();
cout << "The basket has:" << endl;
while (rs->next())
cout << rs->getInt(2) << " " << rs->getString(1) << endl;