(Ubuntu下linux编程) 第14章 《数据》,50~51页,执行批量SQL语句,Multi-StatementsOption,连续执行建表,插入数据,查询,却不能得到结果的问题

将书上的源代码稍微修改了一下,增加了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才对。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值