Я пишу свое первое приложение для базы данных после примерной программы, которую дал преподаватель, но ни образец, ни моя собственная программа не могут подключиться к базе данных. (Примерная программа JDBC может, поэтому сервер должен быть в порядке).
У меня есть эти vars в объявлении класса:
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
Вот конструктор моего класса обработчика базы данных, в котором должно быть сделано соединение:
DBModule::DBModule(string server, string database)
{
this->server = server; //"localhost" is loaded into it
this->database = database; //"test" is loaded into it, of course it exists on the server
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
command = "DRIVER={MySQL ODBC 3.51 Driver};SERVER="+this->server+";DATABASE="+this->database+";";
//command looks like this now:
//"DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;"
ret = SQLDriverConnect(dbc, NULL, (SQLWCHAR *)command.c_str(), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (!SQL_SUCCEEDED(ret)) {
err += CONNECT_DATABASE*DATABASE_UNREACHABLE;
good = false;
return;
} else {
good = true;
}
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
command = sysToStd(DBINIT);
SQLPrepare(stmt, (SQLWCHAR *)command.c_str(), SQL_NTS);
ret = SQLExecute(stmt);
}
Ret в SQLDriverConnect получает значение -1.
Я использую последний XAMPP в качестве сервера со всеми настройками по умолчанию (так что я "root" и пароля нет). Я попытался добавить UID = root в строку подключения, но он сделал то же самое.
Спасибо за любую помощь.
У вас, вероятно, не установлены драйверы MySQL ODBC. JDBC работает, потому что вам не нужно "устанавливать" их: это некоторые .jar файлы, которые могут поставляться с Java-приложением. Если вы будете использовать ODBC, тогда установите MySQL ODBC-драйверы, настройте соединение в ODBC Manager как системный DSN, затем из диспетчера ODBC проверьте, подключается ли он к базе данных (большинство драйверов ODBC, которые я знаю, имеют кнопку "тестовое соединение" ).
Когда такой тест показывает, что вы "подключены" или похожи, вы можете проверить, подключено ли ваше приложение. Ваше соединение выглядит следующим образом:
DRIVER={MySQL ODBC 3.51 Driver};SERVER=...;DATABASE....
поэтому в соответствии с: http://www.connectionstrings.com/mysql#p30, похоже, вы пытаетесь использовать MySQL Connector/ODBC 3.51
Может быть, база данных не прослушивает порт dafult?