mysql结果集为空

mysql resultset is empty?

本文关键字:结果 mysql      更新时间:2023-10-16

编辑

后续问题:mysql结果集总是空

--

resultset看起来是空的,我确信表存在,没有抛出SQLException。它应该打印计数,但没有。

C数据库头

class CDatabase
{
    bool verify(string, string);
public:
    sql::Connection *con;
    CDatabase();
    ~CDatabase();
};

C数据库::C数据库

con = driver->connect("", "", "");
con->setSchema("");

C数据库::验证

bool CDatabase::verify(string channel, string hyper_key)
{
    if (!con) return false;
    try
    {
        sql::Statement *stmt;
        sql::ResultSet *res;
        stmt = con->createStatement();
        stmt->execute("SELECT COUNT(*) FROM dark_souls2_widgets");
        res = stmt->getResultSet();
        cout << res->rowsCount();
        delete stmt;
        delete res;
    }
    catch (sql::SQLException &e) {
        cout << "# ERR: SQLException in " << __FILE__;
        cout << "(" << __FUNCTION__ << ") on line »" << __LINE__ << endl;
        cout << "# ERR: " << e.what();
        cout << " (MySQL error code: " << e.getErrorCode();
        cout << ", SQLState: " << e.getSQLState() << " )" << endl;
        return false;
    }
    return false;
}

它不应该显示计数,它应该显示1,因为这个查询要么失败,要么结果只有一行。如果你想知道dark_souls2_widgets表中有多少行,那么你可以用来做

res = stmt->getResultSet();
while (res->next()) {
  cout << res->getInt(1); // getInt(1) returns the first column
}

我已经有一段时间没有将mysql与c++一起使用了,但我会尝试一下。。。这是dev.mysql 中的一个示例

stmt = con->createStatement();
res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
while (res->next()) {
    cout << "t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
}

首先,我注意到您使用的是execute((而不是executeQuery((。最重要的是,如果成功,rowsCount((将始终为1行,因为查询只返回1行,其中包含查询结果。试试这个。。

stmt->executeQuery("SELECT COUNT(*) FROM dark_souls2_widgets");
res = stmt->getResultSet();
while (res->next()) {
    cout << res->getInt(1);
}

或者这也应该起作用,因为它将选择每一行并输出返回的行数

stmt->executeQuery("SELECT * FROM dark_souls2_widgets");
cout << res->rowsCount();

编辑-试试这个

stmt = con->creteStatement()
res = stmt->executeQuery("SELECT COUNT(*) FROM dark_souls2_widgets");
while (res->next()) {
    cout << res->getInt(1);
}