我正在按照教师给出的示例程序编写我的第一个数据库应用程序,但样本和我自己的程序都无法连接到数据库。 (JDBC示例程序可以,所以服务器应该没问题)。
我在类声明中有这些变量:
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);
}
SQLDriverConnect的ret获得-1值。
我使用最新的XAMPP作为服务器,具有所有默认设置(所以我是“root”,没有密码)。我已经尝试将UID = root添加到连接字符串,但它也做了同样的事情。
感谢您的帮助。
答案 0 :(得分:0)
您可能没有安装MySQL ODBC驱动程序。 JDBC的工作原理是因为您无需“安装”它们:它们是Java应用程序附带的一些.jar文件。如果您将使用ODBC然后安装MySQL ODBC驱动程序,在ODBC管理器中将连接配置为系统DSN,然后从ODBC管理器检查它是否连接到数据库(我知道大多数ODBC驱动程序都有“测试连接”按钮)。
当此类测试显示您“已连接”或类似时,您可以测试您的应用程序是否连接。你的连接刺痛看起来像:
DRIVER={MySQL ODBC 3.51 Driver};SERVER=...;DATABASE....
所以根据:http://www.connectionstrings.com/mysql#p30它看起来你正在尝试使用MySQL Connector / ODBC 3.51
也许数据库没有在dafult端口上监听?