消息: [unixODBC][驱动程序管理器]无法打开库"MySQL ODBC 5.1 驱动程序": 找不到文件nSQL状态: 01000
Message: [unixODBC][Driver Manager]Can't open lib 'MySQL ODBC 5.1 Driver' : file not foundnSQLSTATE: 01000
我想用c++与mysql创建一个odbc连接,我已经附上了我的代码。请帮我纠正错误,这是我发布的问题的标题。
#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
using namespace std;
void show_error(unsigned int handletype, const SQLHANDLE& handle) {
SQLCHAR sqlstate[1024];
SQLCHAR message[1024];
if(SQL_SUCCESS == SQLGetDiagRec(handletype, handle,
1, sqlstate, NULL, message, 1024, NULL))
cout<<"Message: "<<message<<"SQLSTATE: "<<sqlstate<<endl;
}
int main() {
SQLHANDLE sqlenvhandle;
SQLHANDLE sqlconnectionhandle;
SQLHANDLE sqlstatementhandle;
SQLRETURN retcode;
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
goto FINISHED;
if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,
SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
goto FINISHED;
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
goto FINISHED;
SQLCHAR retconstring[1024];
switch(SQLDriverConnect (sqlconnectionhandle, NULL,
(SQLCHAR*)"DRIVER={MySQL ODBC 5.1 Driver};PORT=3306;SERVER=localhost;DATABASE=market;UID=root;PWD=123;",
SQL_NTS,
retconstring,
1024,
NULL,
SQL_DRIVER_NOPROMPT)){
case SQL_SUCCESS_WITH_INFO:
show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
break;
case SQL_INVALID_HANDLE:
case SQL_ERROR:
show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
goto FINISHED;
default:
break;
}
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT,
sqlconnectionhandle, &sqlstatementhandle))
goto FINISHED;
if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle
SQLCHAR*)"select * from employee", SQL_NTS)) {
show_error(SQL_HANDLE_STMT, sqlstatementhandle);
goto FINISHED;
}
else{
char name[64];
char dept[64];
while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
SQLGetData(sqlstatementhandle, 1, SQL_C_CHAR, name, 64, NULL);
SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, dept, 64, NULL);
cout<<" "<<name<<" "<<dept<<endl;
}
}
FINISHED:
SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
SQLDisconnect(sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);
}
在你调用SQLDriverConnect的Driver属性是"MySQL ODBC 5.1 Driver",所以你应该在你的odbcinst.ini文件中有这样一个条目:
[MySQL ODBC 5.1 Driver]
driver = /some/path/to/libxxx.so
你需要检查/some/path/to/libxxx。所以存在,是可读的,可执行的,最后可能在它上面运行LDD,以确保它依赖的任何东西都已经安装。
您可以使用命令odbcinst -j找到您的odbcinst.ini文件。
您需要确保执行了下面列出的所有步骤。
1)在驱动程序的so文件上运行ldd,检查是否加载了所有所需的库。如果您发现无法找到某些库,请在LD_LIBRARY_PATH环境变量中手动添加这些库的路径。
2)如果odbbcst .ini文件不存在,创建它,并在
下面添加条目[MySQL ODBC 5.1 Driver]
Description = ODBC for MySQL
Driver = <Path_to_Dir_where_you_have_installed_driver>/libxxx.so
Setup = <Path_to_Dir_where_you_have_installed_driver>/libxxx.so
3)设置环境变量ODBCINST指向刚刚创建的ODBCINST .ini。例如,如果您正在使用bash shell,您可以像下面这样设置变量
export ODBCINST=<path_to_dir_where_odbcinst.ini_is_craeted>/odbcinst.ini
您可以根据您使用的shell相应地更改命令。
4)在某些情况下,仅设置ODBCINST是不够的,您需要设置ODBCSYSINI以确保它拾取您在上一步中设置ODBCINST的ODBCINST .ini文件。
export ODBCSYSINI=<path_to_dir_where_odbcinst.ini_is_created>
再次根据您使用的shell更改命令。
相关文章:
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 将库链接到另一个应用程序时,CMAKE 找不到库
- 我在c ++矩阵计算器程序中找不到错误
- Qt应用程序找不到第三方DLL并崩溃
- Qt视频流应用程序:找不到qt.mediaplayer的服务
- 程序找不到回车符或换行符。退货超出范围
- [Microsoft] [ODBC驱动程序管理器]找不到数据源名称,也没有指定默认的驱动程序
- (Qt 5.6)切换到"Release"模式时程序找不到.txt文件
- 交叉编译用于ARM的MongoDB C++驱动程序.找不到Boost库
- SFML2 应用程序找不到共享对象
- LLVM JIT编译的程序找不到外部函数
- C++程序找不到提升
- 为什么应用程序找不到这个libSDL2_image-2.0.so.0库?-Ubuntu 14.04
- 服务加载程序找不到服务提供程序类,即使类与 META-INF/services 位于同一 JAR 文件中也是如此
- [UnixODBC][驱动程序管理器]无法打开 lib '/usr/lib/libmyodbc.so' :找不到文件,但文件存在
- c++应用程序找不到com dll,因为编译器使用不正确的guid生成.tlh文件
- boost.log std::异常格式化程序找不到运算符<< 自己的命名空间中的重载
- SFML 程序找不到 libGLEW
- 消息: [unixODBC][驱动程序管理器]无法打开库"MySQL ODBC 5.1 驱动程序": 找不到文件nSQL状态: 01000