完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【EVB-335X-II试用体验】之QT远程访问MySql数据库(交叉编译MySql QT客户端驱动程序及功能测试) MySQL是一款非常优秀的、开源、免费的数据库,其查询速度非常快,连续多年排名世界第一。我在Nanopi M2的试用报告中,写过两篇在Linux系统下安装MySQL,可视化配置MySQL,以及采用QT集成开发环境设计开发操作MySQL数据库的程序范例。那个篇报告相对来说还是比较简单的,因为Nanopi M2上运行的是基于Debian的Linux系统,我们可以直接通过apt-get install,安装本地MySQL,并且可以通过apt-get instll安装QT操作MySql的驱动程序。 而对于EVB-335X_II开发板来说,其硬件资源非常有限,只有256MB的Nand Flash,我们很难把一个庞大的MySql安装到EVB-335X-II的运行环境中。还有一个需要认真面对的一个问题是,保存在数据库中数据的稳定性、安全性和一致性。如果我们把EVB-335X-II运行在工业环境中,而数据又保存在开发板的本地存储器中,我们很难保证在恶劣的环境下,开发板能够稳定的运行,如果由于强磁干扰、剧烈震动导致存储器的损坏,我们保存在存储器中的数据库数据将不可恢复。 对于企业级的数据库应用,我们通常采用C/S架构的开发模式,即数据库服务器运行在环境适度的计算机中心机房,而数据采集前端运行在工业现场,数据采集设备通过工业以太网将结合数据库远程驱动程序,将数据写入运行在计算机机房的数据库服务器上。 对于我想通过EVB-335X-II搭建的一个工业级的RFID数据采集系统,为了保证数据的安全性、稳定性,采用业界通用的C/S开发模式。Server端,我采用PC机模拟数据库服务器,即通过Ubuntu虚拟机运行MySql数据库,配置Server端的Mysql数据库支持通过以太网的远程操作;移植能够在EVB-335X-II开发板上运行的MySql远程访问的client端驱动程序;创建一个简单的基于QT的demo,使其运行在EVB-335X-II开发板上,实现将数据远程写入数据库服务器,并远程查询数据数据,将查询结果显示在EVB-335X-II本地QT应用程序界面上。 本主题的试用报告分为两大部分:移植MySql数据库驱动程序到EVB-335X-II;配置数据库服务器、配置EVB-335X-II的系统环境,以及开发QT远程访问数据库服务器的应用程序。 1. 下载必须的软件 下载MySQL的源码包mysql-5.1.70.tar.gz(CSDN有链接); 下载ncurses-5.6.tar.gz 这两个软件包我会以附件的形式提供。 2. 编译能够在PC机运行的MySql 我们编译能够在PC机端运行的Mysql,主要是了为了得到交叉编译时要用的一个文件。 1)将第一节下载的软件源码拷贝到Ubuntu虚拟机; 2)解压MySql源码 tar -zxvf mysql-5.1.70.tar.gz -C/home/vmuser/EVB-335X-II/source mv mysql-5.1.70 mysql-5.1.70_pc 执行结果如图所示: 3)配置MySql cd mysql-5.1.70_pc ./configure -prefix=/usr/local/mysql-pc 4)编译与安装 执行命令: make sudo make install 编译、安装结果如图所示: 3. 交叉编译ncurses 在交叉编译MySql时,需要用到ncurses的库文件,所以我们提前对其进行编译。 执行命令: su root export PATH=$PATH:/opt/gcc-linux/bin (交叉编译链的路径) tar -zxvf ncurses-5.6.tar.gz cd ncurses-5.6 make make install 配置、编译、安装结果如图所示: 4. 交叉编译MySql 1)为ARM再次解压缩MySql源码 执行命令: tar -zxvf mysql-5.1.70.tar.gz -C/home/vmuser/EVB-335X-II/source mv mysql-5.1.70 mysql-5.1.70_arm 命令执行结果如图所示: 2)修改configure文件 cd mysql-5.1.70_arm 在configure文件下找到如下图所示相关代码,注释掉蓝色部分。该文件中共有4处。千万别缺,否则编译会出错了,找到4处相同的.修改后保存退出。 主要上述代码中的echo是我们自己加上去的,必须有,否则编译报错。 3) 配置MySql 执行命令: ./configure --host=arm-linux-gnueabihf --enable-static --with-named-curses-libs=/usr/local/ncurses/lib/libncurses.a --prefix=/usr/local/mysql-arm --without-debug --without-docs--without-man --without-bench --with-charset=gb2312--with-extra-charsets=ascii,latin1,utf8 4) 交叉编译MySql 执行编译命令: make 会提示一个gen_lex_hash相关的错误,我们把第一节中编译的gen_lex_hash文件拷贝到交叉编译目录下,执行如下命令: cp .../ mysql-5.1.70_pc/sql/gen_lex_hash ./sql/ 然后再次执行编译命令: make 编译过程中再次出错:sql_parse.cc:××××:21: operator '<' has no left operand ××××表示该文件的行号,按照这个行号找到后,在此行的上面,添加一个宏定义:#define STACK_DIRECTION 1 即执行命令: gedit ./sql/ sql_parse.cc 定位到第XXXX行,在该行的上面输入语句#define STACK_DIRECTION 1,然后保存退出。 继续执行编译命令: make 编译结束后执行安装命令: make install 4) 执行命令交叉编译QT4.8.4下的MySql驱动库 我们上一篇试用报告介绍了如何交叉编译QT4.8.4,我进入QT4.8.4的源码目录下: cd /home/vmuser/EVB-335X-II/source/qt-everywhere-opensource-src-4.8.4/src/plugins/sqldrivers/mysql/ 用上一篇交叉编译好的qmake编译MySql驱动: /opt/qtenv/ QT-4.8.4-arm/bin/qmake "INCLUDEPATH+=/usr/local/mysql-arm/include/mysql""LIBS+=-L/usr/local/mysql-arm/lib/mysql -lmysqlclient_r" mysql.pro 再次执行命令: make 交叉编译结束后,在QT的如下目录下生成了QT下MySql基于AMR架构的驱动程序,目录如下: qt-everywhere-opensource-src-4.8.4/plugins/sqldrivers/libqsqlmysql.so 如图所示: 4) 将交叉编译好的库文件拷贝到NFS共享目录 将libsqlmysql.so拷贝到NFS: cp /home/vmuser/EVB-335X-II/source/qt-everywhere-opensource-src-4.8.4/plugins/sqldrivers/libqsqlmysql.so /nfsshare 将交叉编译的MySql其他库文件拷贝到NFS,文件路径为: /usr/local/mysql-arm/lib 需要拷贝的文件如图所示: 拷贝到NFS共享目录,如图所示: 5. 配置数据库服务器 我们把Ubuntu虚拟机做为数据库服务器。 1)安装MySql sudo apt-getinstall mysql-server 在安装过程中需要设定root用户登陆数据库管理系统的密码 apt-get isntallmysql-client sudo apt-getinstall libmysqlclient-dev 2)安装可视化配置MySql工具 sudo apt-get install mysql-workbench 3)配置Mysql可远程访问 修改文件内容: gedit /etc/mysql/mycnf 注释掉下图所示的行: 执行如下命令: mysql -uroot -p Enter password: mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sy31214' WITH GRANT OPTION; mysql>FLUSH PRIVILEGES; 其中sy31214是远程登陆密码,你可以修改成自己定义的密码。 退出Mysql,重启MySql: sudoservice mysql restart 4)启动可是化Mysql配置工具 ./mysql-workbench 如图所示: 关于如何建立数据库、建立数据库表等操作,请参考我的Nanopi M2的相关试用报告。 在MySql数据库中创建一个名为test_db1的数据库。 6. 开发基于QT的MySql程序 启动qtcreator,创建mysql_test工程,如图所示: 设置工程如图所示: 编写代码如图所示: 源码如下: #include "widget.h" #include "ui_widget.h" #include #include #include #include #include #include Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("192.168.1.102"); //远程主机IP地址 db.setDatabaseName("test_db1"); //通过mysql-workbench创建一个数据库 db.setUserName("root"); db.setPassword("sy31214"); //根据你自己设置远程登陆的密码修改 if(!db.open()) QMessageBox::information(this,tr("worning"),tr("Opendatabase failed!")); else QMessageBox::information(this,tr("worning"),tr("Opendatabase succeed!")); QSqlQueryquery; query.exec("create table hello(id bigint not nullauto_increment,name varchar(255),age bigint,primary key (id))"); query.exec("insert intohello(name, age) values('xiaoxi', 18)"); query.exec("insert into hello(name, age) values('xiaonan',19)"); query.exec("insert into hello(name, age) values('xiaobei',20)"); query.exec("insert into hello(name, age) values('xiaodong',21)"); QSqlQueryModel *model = new QSqlQueryModel; model->setQuery("select * from hello"); model->setHeaderData(0,Qt::Horizontal, "id"); model->setHeaderData(1, Qt::Horizontal, "name"); model->setHeaderData(2, Qt::Horizontal, "age"); QTableView *view = new QTableView(this); view->resize(400,200); view->setWindowTitle("QSqlQueryModel"); view->setModel(model); view->show(); db.close(); } 程序编译结果如图所示: 执行命令,将mysql_test拷贝到NFS共享目录: cd mysql_test /nfsshare 7. 将Mysql移植到EVB-335X-II 1) 给开发板上电拷贝文件 开发板上电后,执行命令: ifconfig eth0 192.168.1.112 mount -t nfs 192.168.1.102:/nfsshare /mnt -o nolock 2)拷贝QT MySql驱动以及Mysql客户端库文件到QT的plugins目录 cp /mnt/libsqlmysql.so /usr/lib/qt/plugins/sqldrivers cp /mnt/libmysql* /usr/lib/qt/plugins/sqldrivers 3)设置加载MySql库的路径环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/qt/plugins/sqldrivers 4)执行程序 cd /mnt ./mysql_test 运行效果如图所示: 系统提示我们远程连接成功,并且打开数据库成功。 点击“OK”按钮后,QT软件开始建表、插入数据、查询数据、以及显示数据,效果如图所示: 8. 小结 经过前后9个小时努力,终于完成了在嵌入式arm板运行的QT+MySql程序,并且实现了EVB-335X-II对远程数据库服务器的访问,使得我们的EVB-335X-II真正的成为了车间级的数据中转服务器。在移植的过程中,出现了很多预想不到的错误,由于一些疏忽,走了不少弯路,不管怎么说,远程MySql上层应用程序可以运行了,从18点开始移植,到测试结束,已是凌晨3点31分,虽然很累、很困,但是移植成功的收获还是值得这些付出的,不多说了,明天早起赶火车,下篇报告,我们再继续。 评分
|
||
相关推荐
4 个讨论
|
||
只有小组成员才能发言,加入小组>>
【盈鹏飞RK3399安卓主板 XPC-3399Pro免费试用】+烧写出厂固件
10344 浏览 0 评论
【盈鹏飞EVB-T335开发板试用体验】debian系统烧写
3394 浏览 1 评论
【盈鹏飞I.MX6UL工控开发板试用体验】linux can 测试
3243 浏览 0 评论
338浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 00:16 , Processed in 0.990701 second(s), Total 70, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号