ИЗМЕНИТЬ
Следующий вопрос: набор результатов 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;
}
Он не должен показывать счетчик, он должен показывать 1
, потому что этот запрос либо завершится неудачно, либо результат будет иметь только одну строку. Если вы хотите узнать, сколько строк существует в вашей таблице dark_souls2_widgets
, вы можете сделать это с помощью
res = stmt->getResultSet();
while (res->next()) {
cout << res->getInt(1); // getInt(1) returns the first column
}
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);
}
mysql
из командной строки? Или, если нет, вы можете загрузить бесплатные инструменты MySQL GUI и выполнить запросSELECT COUNT(*) FROM dark_souls2_widgets;
вручную, чтобы подтвердить, что вы должны получить.