MySQL набор результатов пуст?

0

ИЗМЕНИТЬ

Следующий вопрос: набор результатов mysql всегда равен нулю

-

resultset кажется пустым, и я уверен, что таблица существует, нет SQLException. Он должен печатать счет, но это не так.

Заголовок базы данных

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

CDatabase:: CDatabase

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

CDatabase:: проверить

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;
}
  • 0
    Можете ли вы запустить mysql из командной строки? Или, если нет, вы можете загрузить бесплатные инструменты MySQL GUI и выполнить запрос SELECT COUNT(*) FROM dark_souls2_widgets; вручную, чтобы подтвердить, что вы должны получить.
  • 0
    Я сделал это и получил счет 1.
Показать ещё 2 комментария
Теги:

2 ответа

2

Он не должен показывать счетчик, он должен показывать 1, потому что этот запрос либо завершится неудачно, либо результат будет иметь только одну строку. Если вы хотите узнать, сколько строк существует в вашей таблице dark_souls2_widgets, вы можете сделать это с помощью

res = stmt->getResultSet();

while (res->next()) {
  cout << res->getInt(1); // getInt(1) returns the first column
}
  • 0
    но это не показывает 1 , это ничего не показывает.
  • 0
    тогда не должно быть никакой связи. В этом можно убедиться, изменив оператор if, то есть: if (! Con) {cout << "no connection"; вернуть ложь;}
Показать ещё 1 комментарий
1

Я не использовал mysql с С++ в то время, но я дам этот снимок... это пример из 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 строка, если она успешна, потому что запрос возвращает только одну строку, которая имеет результат вашего запроса. Попробуйте это.

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);
}
  • 0
    Есть что-то еще не так, потому что это вообще ничего не дает
  • 0
    Ваш код дает нарушение доступа при отладке, должно быть что-то не так с DLL или библиотеки?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню