本文介绍的是在linux下QT连接Mysql数据库,MySQL数据库是一个小型关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
之前用 C 语言连了mysql数据库,因为项目毕竟是用QT包装的,还需要在QT的界面里显示,所以这一次就用QT来连一下mysql。
首先说一下我的电脑是ubuntu10.10;之前安装了QT的linux全部套件(包括QT creator),也安装了嵌入式qt的那三个编译环境(X11,X86,ARM),但是这一次我只用QT creatot里的qmake编译(以为之前编译完那三个环境后,我就把编译文件夹全删了)。
首先,安装mysql客户端(mysql-devel),和C语言连接一样,执行命令:
- sudoapt-getinstalllibmysqlclient-dev
- 或
- sudoapt-getinstalllibmysqlclient15-dev
因为我之前安装过,所以这一步就省略了。
然后,连接linux数据库肯定要有驱动,这个在qt的源码里就有:进入文件夹:
- cdQTDIR/src/plugins/sqldrivers/mysql//这就是qt存放mysql驱动源码的目录
目录里应该有main.cpp 和moc_qsql_mysql.cpp两个文件
执行命令:
- qmake-project//生成mysql.pro文件,可能这一步会说你没有权限,那么chmod给它权限就可以了
- qmake"INCLUDEPATH+=/usr/include/mysql""LIBS+=-L/usr/lib/mysql-lmysqlclient_r"mysql.pro
- /usr/include/mysql//mysql所有头文件所在的位置,mysql.h就在此处
- /usr/lib/mysql//mysql库的位置
然后,执行命令:
- make
- sudomakeinstall
此时,在QTDIR/src/plugins/sqldrivers/mysql 这个目录下,就生成了一个文件:libqsqlmysql.so;把它拷贝到QTDIR/plugins/sqldrivers, 目录下面;
现在开始编程:随便建工程:加入如下代码:
- #include<QtSql>
- #include<QMessageBox>
- #include<QTextStream>
- QTextStreamout(stdout);
- QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("localhost");
- db.setDatabaseName("test");
- db.setUserName("root");
- db.setPassword("xxxxxx");
- if(!db.open())
- {
- QMessageBox::critical(0,QObject::tr("DatabaseError"),db.lastError().text());
- returna.exec();
- }
- QSqlQueryquery;
- query.exec("SELECT*FROMt_homedata");
- while(query.next())
- {
- QStringid=query.value(0).toString();
- QStringtype=query.value(1).toString();
- QStringdata=query.value(2).toString();
- out<<id<<","<<type<<","<<data<<endl;
- }
注意,这段代码,是我加入到工程中的,恩,我就放在main.cpp里;#include <QtSql>这个是必须的;#include <QTextStream>这个是用来进行控制台打印输出的,我的数据库名为test,中间有一个表叫t_homedata,表里有三个varchar型字段:其打印结果为:
- 100010,23,32.45
- 100011,12,99
- 100012,11,35.10
注意,再进行工程的编译和运行之前(恩,因为我的电脑里实际有4个qt编译环境,所以还需要再Qtcreator的project选项里设置该项目的编译器,我的编译器设置为qt-opensource,即Qt creator自带的,因为我之前所进行的mysql驱动编译也都是再Qtcreator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行:
- QT+=sql
Qt帮助文档里就是这么说的:
- Toincludethedefinitionsofthemodule'sclasses,usethefollowingdirective:
- #include<QtSql>
- Tolinkagainstthemodule,addthislinetoyourqmake.profile:
- QT+=sql
- defineDRIVER"QMYSQL3"/*seetheQtSQLdocumentationforalistofavailabledrivers*/
- defineDATABASE":dehua:"/*thenameofyourdatabase*/
- defineUSER"root"/*usernamewithappropriaterights*/
- definePASSWORD"password"/*passwordforUSER*/
- defineHOST"http://192.168.10.14"/*hostonwhichthedatabaseisrunning*/
- boolServerInfo::connMysql(intcsID,QStringmsg)
- {
- MYSQLmysql;
- charhost[32]="localhost";
- charuser[32]="root";
- charpasswd[32]="password";
- chardbname[32]="dehua";
- QStringsql;
- if(mysql_init(&mysql)==NULL)/*初始化数据结构*/
- {
- syslog(LOG_USER|LOG_INFO,"initalmysqlhandleerror\n");
- returnFALSE;
- }
- if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0)==NULL)/*连接数据库*/
- {
- syslog(LOG_USER|LOG_INFO,"Failedtoconnecttodatabase:Error:%s\n",mysql_error(&mysql));
- returnFALSE;
- }
- msg.replace("'","");//去掉单引号
- sql=QString("insertintosocRec(socketID,message)values(%1,'%2')")
- .arg(csID)
- .arg(msg);/*构造SQL语句*/
- qWarning(sql);
- if(mysql_query(&mysql,sql)!=0)/*执行SQL语句,进行检索数据*/
- {/*执行SQL语句出错*/
- syslog(LOG_USER|LOG_INFO,"selectps_infoError:%s\n",mysql_error(&mysql));
- qWarning("false");
- }
- else
- {
- qWarning("true");
- }
- }
【编辑推荐】
Qt数据库之添加MySQL驱动插件
使用TOMCAT连接池连接MySQL
C++连接mysql数据库的两种方法
如何安全的远程使用MySQL GUI工具
解析Visual Studio 2005中QT配置使用
知优网 » 在linux下QT连接Mysql数据库(qt和mysql数据库连接)