将书上的源代码稍微修改了一下,增加了22行,27~31行,以便在执行建表,插入数据,之后,再查询数据,得到查询结果
#include <iostream>
#include <mysql++/mysql++.h>
#include <mysql++/options.h>
using namespace std;
int main()
{
mysqlpp::Connection con;
con.set_option(new mysqlpp::MultiStatementsOption(true));
try
{
con.connect("d2school", "127.0.0.1"
, "root", "mysql_d2school");
std::string multi_sql =
"DROP TABLE IF EXISTS test_tmp; \n"
"CREATE TABLE test_tmp(id INT); \n"
"INSERT INTO test_tmp VALUES(1); \n"
"UPDATE test_tmp SET ID = 2 WHERE id = 1; \n"
"SELECT * FROM test_tmp;";
mysqlpp::Query query = con.query(multi_sql);
mysqlpp::StoreQueryResult res = query.store();
//打印查询结果
for(unsigned int i = 0; i < res.num_rows(); ++ i)
{
cout << res[i]["id"] << "\r\n";
}
}
catch(mysqlpp::Exception const& e)
{
cerr << "ERROR!" << e.what() << endl;
return -1;
}
return 0;
}
运行结果如下,得不到查询结果
数据库里面查询的结果如下,明明数据已经插入了表内
重新写一个查询程序如下:
#include <iostream>
#include <mysql++/mysql++.h>
using namespace std;
int main()
{
mysqlpp::Connection con;
// con.set_option(new mysqlpp::SetCharsetNameOption("gbk"));
try
{
con.connect("d2school", "127.0.0.1"
, "root", "mysql_d2school");
mysqlpp::Query query = con.query(
"SELECT * FROM test_tmp");
mysqlpp::StoreQueryResult res = query.store();
for(unsigned int i = 0; i < res.num_rows(); ++ i)
{
cout << res[i]["id"] << "\r\n";
}
}
catch(mysqlpp::Exception const& e)
{
cerr << "ERROR!" << e.what() << endl;
return -1;
}
return 0;
}
运行结果如下,得到了查询结果。这是怎么回事呢?
原因:第一次是混合多个语句执行,并且前面的语句不是查询语句。查询语句才会有“一行一行”(Rows)的结果集。因此代码第一次取结果时,res.num_rows() 应该是0才对。