ubuntu16.04下qt5连接MySQL数据库以及连接失败的解决方法

1.ubuntu16.04下qt5连接MySQL数据库

在.pro文件中添加

QT       += sql

在main.cpp中添加头文件

#include <QtSql>

#include <QMessageBox>

在main.cpp中添加连接数据库的代码 

//连接数据库-------------------------------------------

    QStringList list = QSqlDatabase::drivers();

    qDebug() << list;

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    if(db.isValid())

    {

        QMessageBox::critical(NULL,"connect","OK");

    }

    else

    {

        QMessageBox::critical(NULL,"connect","ERROR");

    }

    db.setHostName("127.0.0.1");// 本地连接

    db.setDatabaseName("vod");// 数据库名字

    db.setUserName("root");// 数据库用户名

    db.setPort(3306);// 如果使用的是默认端口可以不设置

    db.setPassword("123456");// 数据库密码

    if(db.open())

    {

        w.show();

    }

    else

    {

        QMessageBox::warning(NULL,"error","数据库连接失败");

        return 0;

    }

 编译代码,此时如果出现如下问题:表示未加载

 2.连接失败问题解决

分析问题:可能是qt与mysql的位数不相同或者缺少驱动依赖。

查看mysql的版本位数:mysql -V

mysql -V

MySQL显示是64位,然后Qt本身是64位,则排除位数不同,则是需要安装Qt的MySQL驱动的依赖。

解决问题:

首先查找libsqlmysql.so文件位置:

find / -name libqsqlmysql.so

进入qt的sqldrivers目录

cd /opt/Qt5.5.0/5.5/gcc_64/plugins/sqldrivers

通过ldd libqsqlmysql.so查看动态库连接情况,发现有三个库是not found

ldd libqsqlmysql.so

 解决libssl.so.10 => not found和libcrypto.so.10 => not found的问题

# sudo apt-get install libssl1.0.0 libssl-dev

# cd /lib/x86_64-linux-gnu

# sudo ln -s libssl.so.1.0.0 libssl.so.10 

# sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10 

 再次通过ldd libqsqlmysql.so查看动态库链接情况,这时发现这两个链接都已经存在

 

 解决问题:libmysqlclient_r.so.16 not found

下载相关的库文件并放到/usr/lib/x86_64-linux-gnu下面

 cd /usr/lib/x86_64-linux-gnu

执行报错:查找原因发现libmysqlclient_r.so.16 这个文件需要手动创建

方法:删除该libmysqlclient_r.so.16重建连接

root@ubuntu:cd /usr/lib/x86_64-linux-gnu

# ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so.16

root@ubuntu:/usr/lib/x86_64-linux-gnu# ls//下面截图显示正常

 

 再查看libmysqlclient_r.so.16可以显示有了,所有依赖库已经下载完成:

 

此时再编译文件可以连接数据库,问题已得到解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值