Ubuntu 16.04 x64 Qt 5.6连接MySQL数据库笔记
有更改 原文地址https://www.zybuluo.com/lovemiffy/note/435940
1. 安装Qt、MySQL并配置MySQL
安装Qt 5.6,访问Qt官方网站,下载qt-opensource-linux-x64-5.6.0.run进行安装。
安装MySQL,并创建数据库和用户
1 sudo apt-get install mysql-server 2 sudo apt-get install mysql-client 3 mysql -u root -p 4 create database TestDB;
创建完数据库后,检查是否创建好了
1 show databases;
创建用户并且分配密码
1 insert into mysql.user(Host,User,Password) values("localhost","TestUser",password("123456"));
注意:如果是5.7版之后的MySQL数据库,执行该语句可能会报错:
ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
这是因为新版mysql数据库下已经没有password这个字段了,password字段改成了
authentication_string,那么执行下列这行语句[1]:
CREATE USER 'TestUser'@'localhost' IDENTIFIED BY '123456';
添加用户后进行刷新
flush privileges;
对用户进行授权
grant all privileges on TestDB.* to TestUser@localhost identified by "123456";
再次进行刷新
flush privileges;
安装Qt连接MySQl相关库
安装libmysqlclient-dev
sudo apt-get install libmysqlclient-dev
sudo apt-get install libqt5sql5-mysql
安装完后,在以下目录检查是否存在libqsqlmysql.so
/opt/Qt5.6.0/5.6/gcc_64/plugins/sqldrivers
注意:随Qt安装方式以及版本不同,路径/opt/Qt5.6.0/5.6/gcc_64可能存在差异。
在该目录下进入终端,执行
ldd libqsqlmysql.so | grep not
执行后,若发现存在下列问题:
libmysqlclient_r.so.16 => not found
libssl.so.10 => not found
libcrypto.so.10 => not found
则按照下列第2.2步和第2.3步的方法进行解决[2]。
解决libmysqlclient_r.so.16 => not found
的问题。
下载 libmysqlclient.so.16,地址: http://files.directadmin.com/services/debian_5.0_64/libmysqlclient.so.16
下载后将该文件拷贝至/usr/lib/x86_64-linux-gnu
,并重命名为libmysqlclient_r.so.16
,参照下列命令。
sudo cp /home/xiaoyafu/下载/libmysqlclient.so.16 /usr/lib/x86_64-linux-gnu
cd /usr/lib/x86_64-linux-gnu
sudo mv libmysqlclient.so.16 libmysqlclient_r.so.16
执行完后,重新执行步骤2.1中的ldd libqsqlmysql.so
,检查是否解决了该问题。
解决libssl.so.10 => not found
和libcrypto.so.10 => not found
的问题。
执行下列命令:
-
sudo apt-get update 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
执行完后,重新执行步骤2.1中的ldd libqsqlmysql.so
,检查是否解决了该问题。
运行测试
启动MySQL,执行:
sudo /etc/init.d/mysql start
执行后,检查MySQL是否正常启动,执行查看命令:
service mysql status
创建Qt MySQl连接测试工程,创建后需要修改.pro文件,在其中加入sql
模块
QT += core gui sql
以下是函数代码:
1 #include <QApplication> 2 #include <QMessageBox> 3 #include <QDebug> 4 #include <QtSql/QSqlDatabase> 5 #include <QtSql/QSqlDriver> 6 #include <QtSql/QSqlError> 7 int main(int argc, char *argv[]) 8 { 9 QApplication a(argc, argv); 10 qDebug() << QCoreApplication::libraryPaths(); 11 qDebug() << QSqlDatabase::drivers()<<endl; /*列出qt可用的数据库*/ 12 /* 13 * 链接mysql数据库 14 */ 15 QCoreApplication::addLibraryPath("/opt/Qt5.6.0/5.6/gcc_64/plugins/sqldrivers/libqsqlmysql.so"); 16 QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL")); 17 db.setHostName("127.0.0.1"); 18 db.setDatabaseName("TestDB"); 19 db.setUserName("TestUser"); 20 db.setPassword("123456"); 21 if (!db.open()) /*测试数据库是否链接成功*/ 22 { 23 QMessageBox::critical(0, QObject::tr("Databse Error"), db.lastError().text()); 24 qDebug() << db.lastError() << endl; 25 } 26 else 27 { 28 qDebug() << "Ok" << endl; 29 } 30 return 0; 31 }
运行该工程,成功,如下图所示。
技术是死的,人是活的,问题是明确的,不要因为技术而技术,技术是为了解决问题