前言
上一篇(嵌入式开发工具——交叉编译libmysql)已经完成了mysql的C API交叉编译的工作,今天将用它来编译生成Qt连接mysql的动态库。
提前准备的工作:
1、向arm开发板中移植Qt,并且能正常运行
2、交叉编译好libmysql(可参考我的文章,或者网上其他大神的文章)
实现效果:
Exynos4412开发板通过Qt连接阿里云数据
一、编译Qt中自带的mysql源码
1、进入Qt源码中mysql目录下
我移植的是Qt5.6,具体目录如下:
qt-everywhere-opensource-src-5.6.0/qtbase/src/plugins/sqldrivers/mysql
2、使用qmake进行配置
qmake "INCLUDEPATH+=/home/mysql/include/mysql" "LIBS+=-L/home/mysql/lib/mysql -lmysqlclient_r" mysql.pro
注:
2.1、/home/mysql/include
为上一篇编译完安装的include文件夹(为了路径短一点,我将其移动到了home目录下)
2.2、/home/mysql/lib
这个是编译完安装的lib文件夹
将上述两个路径改为自己的路径即可
执行完之后会在源码目录下生成Makefile
Makfile中的内容
3、执行make
执行完之后会在../../../../plugins/sqldrivers/
生成libqsqlmysql.so
将ibqsqlmysql.so拷贝到开发板中的文件系统的对应的Qt目录下
二、程序测试
1、建立一个新的Qt工程,在pro文件的QT项添加 sql
2、简单写了个程序,连接阿里云数据库,并将一个表格中的内容输出到textEdit上
阿里云数据库
测试程序
mysql.h文件
#ifndef MYSQL_H
#define MYSQL_H
#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlQueryModel>
#include <QMessageBox>
namespace Ui {
class Mysql;
}
class Mysql : public QMainWindow
{
Q_OBJECT
public:
explicit Mysql(QWidget *parent = 0);
~Mysql();
QSqlDatabase db;
QSqlQuery *query;
private:
Ui::Mysql *ui;
};
#endif // MYSQL_H
mysql.cpp文件
#include "mysql.h"
#include "ui_mysql.h"
Mysql::Mysql(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Mysql)
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QMYSQL");//添加数据库
db.setHostName("");//主机地址
db.setDatabaseName("test");//数据库名字
db.setUserName("root");//用户名
db.setPassword("");//密码
if(!db.open())
{
QMessageBox::information(this,tr("worning"),tr("Opendatabase faiLED!"));
}
else
{
QMessageBox::information(this,tr("worning"),tr("Opendatabase succeed!"));
query = new QSqlQuery();
query->exec("Select * from test");//执行 Select * from test
while(query->next())
{
//将获取到的结果集合插入到textEdit中
ui->textEdit->insertPlainText(query->value(0).toString());
}
db.close();
}
}
Mysql::~Mysql()
{
delete ui;
}
3、qmake、make生成可执行文件
开发板运行情况
显示连接成功
显示连接数据
工程文件:百度云网盘
链接:https://pan.baidu.com/s/11xT6g7-e5Bb9qWujWqbRHA
提取码:9dcx
至此,Qt就能够愉快地与数据库进行交互了