Codeblocks环境用OTL+odbc连接MySQL 找不到SQLAllocHandle()这个函数

candy060403 2012-12-16 11:06:00
我最近在用Codeblocks这个编译器。
想用OTL连接数据库,做个比较通用的版本。
在连接MySQL的时候,安装了MySQL的odbc驱动程序,cb中设置Linker settings设置了myodbc5.lib的绝对路径,我感觉应该链接进来了,MySQL的odbc库,编译的时候没有问题,运行程序就崩掉,Bebug跟进去显示otl的头文件里登陆的函数有一个语句调用了SQLAllocHandle()这个函数,但运行的时候显示这个函数地址未知。。。
我感觉是dll加载的问题,但我的库文件myodbc5.lib已经加载进去了,为什么找不到函数的入口???
Debug跟进去提示函数地址???


源代码如下

#include <iostream>

using namespace std;

#define OTL_ODBC_MYSQL

#include <otlv4.h>

otl_connect db;

int main()
{
char* constr="Driver={MySQL ODBC 5.1 Driver};Server=localhost; Database=test; Uid=****; Pwd=****; CharSet=UTF8; ";
otl_connect::otl_initialize();

try
{
cerr<<constr<<endl;
db.rlogon(constr);
cerr<<"已连接数据库"<<endl;
db.logoff();
}
catch(otl_exception& p)
{
cerr<<p.msg<<endl;
cerr<<p.stm_text<<endl;
cerr<<p.code<<endl;
cerr<<p.sqlstate<<endl;
cerr<<p.var_info<<endl;
}


cout << "Hello world!" << endl;
return 0;
}

...全文
368 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
candy060403 2012-12-17
  • 打赏
  • 举报
回复
引用 1 楼 hongwenjun 的回复:
mysql-connector-c-noinstall-6.0.2-win32.zip 解压成 mysql mysql-connector-c++-noinstall-1.0.5-win32.zip 解压成 mysqlcpp 上次 使用 c的库可以链接,cpp的库不能链接。 c的库依赖少一些,兼容性好一下。 cpp的库,和编译器版本关系很多,一般不能通用……
库的不兼容缘故提醒了我,我这个不用OTL链接数据库就没意义了。所以给你一部分分数吧,谢谢~~
candy060403 2012-12-17
  • 打赏
  • 举报
回复
我自己解决了,找不到函数是因为没加载库。 cb用的是gcc编译器,所以要加载它对应的gcc下的libodbc32b.a,在build options里的Linker settings里添加WinGW目录里lib文件夹里的libodbc32b.a这个库,而且记得要在myodbc.lib前面添加,否则依然出错。添加上库引用,rebuilding就可以了。
candy060403 2012-12-17
  • 打赏
  • 举报
回复
你说的库不兼容有可能,不过我需要用OTL连接,不是直连一种类型的数据库,需要通用性的。 我去试试c的那个odbc版本吧。 用VC连接倒是没问题 郁闷
hongwenjun 2012-12-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <winsock.h>
#include "mysql.h"


int main(int argc, char* argv[])
{
    unsigned short Port = 3306;
    char* IPAddress = "localhost";
    char* UserName = "root";
    char* Password = "123456";
    char* DBName = "test";
    unsigned long i;
    printf("Start... \n");

    MYSQL* ssock;
    MYSQL_RES*   res;
    MYSQL_ROW   row;
    ssock = (MYSQL*)malloc(sizeof(MYSQL));
    mysql_init(ssock);
    if (ssock == NULL) {
        printf("EROR: MySQL ssock init error. \n");
        return FALSE;
    }
    printf("MySQL ssock init OK. \n");

    //连接到指定的数据库
    ssock = mysql_real_connect(ssock, IPAddress, UserName, Password, NULL, Port, NULL, 0);
    if (!ssock) {
        printf("conn fail... \n");
        unsigned int mtint = mysql_errno(ssock);
        return FALSE;
    }
    printf("MySQL connnect OK... \n");

    if (mysql_select_db(ssock, DBName) != 0) {
        printf("select db error. \n");
        return FALSE;
    }
    printf("select db OK. \n");
    printf("version=%d \n", mysql_get_server_version(ssock));
    //SQL查询语句
    if (mysql_query(ssock, "select * from testuser where id")) {
        printf("mysql_query() Error, %s\n", mysql_error(ssock));
    }

    if (!(res = mysql_store_result(ssock))) {
        printf("mysql_store_result() Error, %s\n", mysql_error(ssock));
    }

    while ((row = mysql_fetch_row(res))) {
        for (i = 0 ; i < mysql_num_fields(res); i++) {
            printf("%s ", row[i]);
        }
        printf("\n");
    }
    mysql_free_result(res);
    mysql_close(ssock);
    printf("End... \n");
    return TRUE;
}
hongwenjun 2012-12-16
  • 打赏
  • 举报
回复
mysql-connector-c-noinstall-6.0.2-win32.zip 解压成 mysql mysql-connector-c++-noinstall-1.0.5-win32.zip 解压成 mysqlcpp 上次 使用 c的库可以链接,cpp的库不能链接。 c的库依赖少一些,兼容性好一下。 cpp的库,和编译器版本关系很多,一般不能通用。 不知道你的 odbc是什么库,是不是库的不兼容缘故。 你使用 mysql-connector-c-noinstall-6.0.2-win32.zip 这个库试试

65,207

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧