不用驱动连接mysql_linux环境下Qt不用驱动,直接连接MySQL

本文介绍了在Linux环境下,如何在Qt 4.5.1中不使用预编译的驱动,而是直接通过源码编译连接MySQL 5.1.34数据库。详细步骤包括修改源码路径,调整工程文件,设置库链接,并提供了连接数据库的示例代码。这种方法避免了版本匹配的问题,提高了灵活性。
摘要由CSDN通过智能技术生成

在笔记本里新做了个环境,Everest 0.6 ,Qt 4.5.1,MySQL 5.1.34。

从其它机器上把Qt的MySQL驱动插件复制到相关目录,打开程序时总是提示找不到数据库驱动。在之前做机器环境时候我也是这么弄的,只要Qt版本一致就没有任何问题,可这次却不知为什么总是不行。

于是按以前编译插件的方法在这个机器上又编译一遍Qt的MySQL驱动插件,还是不好使。

查阅Qt助手,在QSqlDatabase部分看到了addDatabase函数的另一个用法:连接自己实现的数据库驱动。

例程中给出了一个连接PostgreSQL数据库的过程,与连接插件相比,它不同的两句在于:

#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"

PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");

很奇怪为什么它要包含一个 .cpp文件,而不是一个头文件。以为就是这么要求的,于是找到了MySQL的相关文件,也这么写了出来,却编译通不过。

通过查阅MySQL的C API文档,经过反复试验,花了两个晚上的时间,终于摸索出了连接MySQL的方法。

具体过程如下:

1。找到 qsql_mysql.cpp 和 qsql_mysql.h 。这两个文件在 Qt 源码包的/sql/sql/drivers/mysql下面,把它们复制到自己工程所在的路径下。

2。修改 qsql_mysql.h 文件中 #include 一行 ,按照具体机器的 mysql.h 所在的路径来修改。我台式机里的MySQL是用Everest工具盘安装的,这一行就是

#include "/usr/include/mysql/mysql.h"

我笔记本里的Everest 0.6 没有工具盘,我直接在官方网站下载的MySQL包进行的手工安装,把MySQL装到了/usr/local/mysql下面,这一行就这样写

#include "/usr/local/mysql/include/mysql.h"

3。修改工程文件。分别在 SOURCES 和 HEADERS 段加入 qsql_mysql.cpp 和 qsql_mysql.h 两个文件,然后在工程文件中加入一行

LIBS += -L/usr/lib/mysql -lmysqlclient

这一行同样需要根据具体机器的路径来写。

4。在连接数据库的模块里,在包含文件部分,加入一行

#include "qsql_mysql.h"

因为这个文件被复制到了工程所在的路径下,所以不用指出它的具体路径。

5。具体连接语句:

MYSQL *conR=mysql_init(NULL);

mysql_real_connect(conR,NULL,NULL,NULL,NULL,0,NULL,0);

QMYSQLDriver *drvR =  new QMYSQLDriver(conR);

dbR=new QSqlDatabase();

*dbR = QSqlDatabase::addDatabase(drvR,"dbr");

dbR->setHostName("192.168.1.201");

dbR->setDatabaseName("clinic");

dbR->setUserName("clinic");

dbR->setPassword("clinic");

if( !dbR->open())    {

QMessageBox::critical(0,QObject::tr("远程数据库未能连接"),dbR->lastError().text());

return 1;

}

数据库的连接参数按实际连接情况设定。

6。在有些机器里由于具体配置环境的不同,可能会出现无法运行的现象。查看调试环境的 Application Output 上有提示:

error while loading shared libraries: libmysqlclient.so.......

解决办法是修改系统的 LD_LIBRARY_PATH 环境变量,增加MySQL的lib所在路径。

7。额外问题。

如果需要建立多于一个的数据库连接,那最好为每一个连接单独建立一个 MYSQL * 变量。否则虽然编译不出错,但无法保证运行也不出错。

使用同一个 MYSQL *变量申请两个连接,一模一样的程序在我的笔记本上不出错,在台式机上就不行。分别使用不同的 MYSQL * 申请不同的连接,就怎么使用都没问题。这和具体的数据库版本以及机器配置环境有关。

总结:

1。使用这种方法连接数据库比使用插件的方法更加灵活,适应性更强。不管Qt的版本怎样换,我们都可以用相同的方法来操作数据库,而不必费力去找不同的插件版本。

2。通过上面这些过程可以看出,真正实现出来的连接和例程给出的方法还是有很大差别的。联机文档中的例程是我们学习编程的宝贵资源,但更要在这些资源的基础上大胆摸索,大胆扩展才能进一步提高自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值