环境
交叉编译器4.3.3
ubuntu:12.04 64位 , QT4.8.1
ARM:2416 ,linux3.1,qt/e4.7.0
简介
在QT/E运行mysql需要mysql库,qtmysql插件同时支持。
根据QT configure可知,使QT支持mysql有两种方式
1.在编译时使用 -qt-sql-mysql,将mysql驱动编译进库中
2.编译mysql为插件,使用插件的方式使用mysql
QT SQL Database Drivers文档介绍了方式2的一些使用方法,http://doc.qt.io/archives/qt-4.8/sql-driver.html
两种方法均需要mysql文件,因此流程为:
编译mysql->编译qt mysql插件
mysql下载链接:http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/
ncurses下载链接:http://ftp.gnu.org/gnu/ncurses/
ubuntu qt支持mysql
sudo apt-get install libqt4-sql-mysql
1.编译mysql插件(ARM)
2.编译QT mysql插件(ARM)
获取qt-everywhere-opensource-src-4.6.3.tar.gz源码并解压,tar -xzvf qt-everywhere-opensource-src-4.6.3.tar.gz
进入源码目录下src/plugins/sqldrivers/mysql,依次执行
/opt/qt4.7/bin/qmake "INCLUDEPATH+=/opt/mysql-arm/include/mysql" "LIBS+=-L/opt/mysql-arm/lib/mysql -lmysqlclient_r" mysql.pro
make
make后当前文件会生成libqsqlmysql.so动态库
注意:此处qmake应当是用于ARM平台上编译QT/E后生成目录下/bin/qmake,否则ARM平台上的QT无法识别到该插件;/opt/mysql-arm为交叉编译得到的mysql目录。
make install,对libqsqlmysql.so精简并移动到QT/E安装目录下plugins/sqldrivers
3.拷贝qtmysql插件至ARM平台
将编译得到的qtmysql插件(第2步)移动到ARM平台上QT库相关文件下,
4.拷贝mysql库至ARM平台
将交叉编译mysql目录lib/mysql动态库文件(第1步)移动到ARM /usr/lib下,
否则运行QT时会报错:error while loading shared libraries: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
5.测试(ARM)
编写简单的QT程序
#include <QSqlDatabase>
#include <QSqlQuery>
QStringList drivers=QSqlDatabase::drivers();
for(int i=0;i<drivers.size();i++)
qDebug("%s",qPrintable(drivers[i]));
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("192.168.0.124");
db.setDatabaseName("testdb"); //库名
db.setPort(3306);
db.setUserName("root"); //账号
db.setPassword("123456"); //密码
bool ok = db.open();
if(!ok)
qDebug("open faild");
else
{
qDebug("open database success !");
QSqlQuery query( "select * from tab");
while(query.next())
{
QString index=query.value(0).toString();
QString name=query.value(1).toString();
QString num=query.value(2).toString();
qDebug("%s,%s,%s",qPrintable(index),qPrintable(name),qPrintable(num));//
}
}
运行效果: