MySQL Connector / C ++ PreparedStatement:'class sql :: PreparedStatement'的转发声明

时间:2013-12-14 12:01:52

标签: c++ g++ prepared-statement mysql-connector forward-declaration

我对c ++ Mysql连接器有一点“问题”。我想用PreparedStatement。我尝试了文档http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-examples-prepared-statements.html

中的示例

我无法编译此代码。我仍然得到错误:

main.cpp:32:10:错误:无效使用不完整类型'class sql :: PreparedStatement' 在/usr/include/mysql_connection.h:28:0中包含的文件中,                  来自main.cpp:4: /usr/include/cppconn/connection.h:44:7:错误:'class sql :: PreparedStatement'的前向声明

我使用debian 7和g ++ 4.7.2。

我一直在谷歌搜索几个小时,我不知道如何解决这个问题。 我很乐意接受任何建议。

我的代码:

#include <iostream>
#include <cstdlib>
#include <mysql_connection.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

int main(int argc, char** argv) {
    try{
        sql::Driver *driver;
        sql::Connection *con;
        sql::PreparedStatement  *prep_stmt;

        driver = get_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "username", "pass");
        // db name
        con->setSchema("aa");

        prep_stmt = con->prepareStatement("INSERT INTO test(id, name) VALUES (?, ?)");

        // this will couse compilation error
        prep_stmt->setInt(1, 1);

        // this will cause only warning but same message
        delete prep_stmt;

        delete con;
    }
    catch (sql::SQLException &e) {
        std::cout << "ERR: " << e.what() << std::endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:12)

缺少一个#include,你必须设置:

  

#include <cppconn/prepared_statement.h>

答案 1 :(得分:1)

问题是由于链接,因为你没有安装mysql驱动程序,或者没有在编译命令中添加。

您可以先安装驱动程序: sudo apt-get -y install libmysqlcppconn5 libmysqlcppconn-dev

安装完成后,编译它: g ++ -o main.cpp -lmysqlcppconn

使用IDE,您可以按照此链接在IDE中添加库。

MySQL Connector/C++: how to build a client on Linux using NetBeans