C++连接mysql数据库时,用getString()方法总是出错

http://www.cnblogs.com/joeblackzqq/p/4332945.html
我按照上面这个链接的教程,用了第二种Connector C++的方法,配置好boost的路径和mysql的路径后,就修改了一下范例的代码:

 #include <iostream>
#include <map>
#include <string>
#include <memory>
#include "mysql_driver.h"
#include "mysql_connection.h"
#include "cppconn/driver.h"
#include "cppconn/statement.h"
#include "cppconn/prepared_statement.h"
#include "cppconn/metadata.h"
#include "cppconn/exception.h"

using namespace std;
using namespace sql;

int main()
{
    sql::mysql::MySQL_Driver *driver = 0;
    sql::Connection *conn = 0;

    try
    {
        driver = sql::mysql::get_mysql_driver_instance();
        conn = driver->connect("tcp://localhost:3306/tree", "root", "123");
        cout << "连接成功" << endl;
    }
    catch (...)
    {
        cout << "连接失败" << endl;
    }
    sql::Statement* stat = conn->createStatement();
    stat->execute("set names 'gbk'");
    ResultSet *res;
    res = stat->executeQuery("SELECT * FROM testuser");
    while (res->next())
    {

        cout << "Id      :" << res->getInt("id") << endl;
        cout << "Name    :" << res->getString("name") << endl;
        //cout << "Address :" << res->getString("address") << endl;
    }
    if (conn != 0)
    {
        delete conn;
    }
    system("pause");
}

为此我创建了一个数据库tree和表testuser:

create database tree;

use tree;

create table testuser(
id INT(4) PRIMARY KEY,
name CHAR(25),
address varchar(45)
);

desc testuser;

insert into testuser values(1,'Tom','China Beijing'),
(2,'Amy','America NewYork');

select*from testuser;

准备工作都做好了,然后就开始执行:
问题来了:
这个是运行后的截图:

就弹出了这个错误

点击调试后,显示这个错误信息:

我注释掉getString()方法后,就可以运行,而且连接也是成功的:

而且两次同时都有这些错误信息:

5个回答

指针的问题,0x000005

sinat_28454173
Neil_YoungHY 请问是哪里的指针问题?是我数据库里表的数据没有被VS识别出来吗?那要怎么改写?
4 年多之前 回复

会不会是空指针引起的

string cmd("SELECT * FROM songs WHERE id = " + to_string(song_id) + ";");
res = stmt->executeQuery(cmd.c_str());
if (res->next()) {
name = res->getString("name").c_str();
}

我试过了。加一个c_str();,就可以了。
用MySQL 5.7.23, VS2015, MySQL Connector C++ 1.1.9

weixin_41800814
404NotFund 牛逼,应该就是为了兼容C String接口,C++就容易出问题
一年多之前 回复
Think88666
晚餐吃什么 还真是,,太奇葩了。。
一年多之前 回复
qq_37975998
云雾_joe 同样的问题,都快把Connecting源代码看完了,都没搞出来。原来如此,叩谢了~大力么么哒!
一年多之前 回复

注意是 : qs.c_str(); 而不是 qs->c_str(); // 这两个都能通过编译。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问