0

我正在使用 MySQL cpp 连接器制作一个 c++ 程序,并且我陷入了:

sql::MethodNotImplementedException on 
MySQL_Connection::prepareStatement(const sql::SQLString& sql, int autoGeneratedKeys)

我搜索了很多,但什么也没找到……我真的不明白发生了什么。这是失败的类的完整来源:

#ifndef __DATABASE_H_
#define __DATABASE_H_

#include <string>
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

#define MYSQL_HOSTNAME "localhost"
#define MYSQL_USERNAME "dummy"
#define MYSQL_PASSWORD "password"

using namespace std;
using namespace sql;

class Database {
public:
    Database();

    static bool login(const string &user, const string &password);

    static Connection *createConnection();
};

#endif

来源:

Connection *Database::createConnection(){
    mysql::MySQL_Driver *driver = mysql::MySQL_Driver::Instance();

    return driver->connect(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD);
}

bool Database::login(const string &user, const string &password){
    bool ret;
    Connection *con = createConnection();
    PreparedStatement *pstmt = con->prepareStatement("SELECT * FROM Players WHERE Username = ? AND Password = ?"); // here's where it fails ._.

    pstmt->setString(1, user);
    pstmt->setString(2, password);

    ResultSet *res = pstmt->executeQuery();
    ret = res->next();

    res->close();
    delete(res);
    pstmt->close();
    delete(pstmt);
    con->close();
    delete(con);

    return ret;
}

当我编译并链接它时,我将 -lmysqlcppconn 添加为库。

我检查了 MySQL c++ 参考,他们说并非所有 JDBC 方法都已实现,但我不明白为什么该函数没有,如果它是一个基本函数。

提前谢谢你,维克多

4

1 回答 1

1

今天下午我也遇到了同样的问题。现在我找到了解决方法,希望我的经验对你有所帮助:我使用的是 ubuntu 10.10,并通过 synaptic 包管理器安装 mysql connector/c++。我找到了动态库文件(libmycppconn.so.xxxx)——它的大小是数十千字节。不小心,我在http://dev.mysql.com/downloads/connector/cpp/1.0.html获得了一个已经编译的 lib 文件,它的大小或多或少是 9 兆字节,这意味着它可能包含比前一个。所以我决定删除突触,并编译源代码,然后 make / make 安装它。完成此操作后,库工作会找到。也许您可以尝试编译源代码并安装它。

祝你好运,习

于 2011-12-26T10:26:22.930 回答