本文介绍的是在linux下QT连接Mysql数据库,MySQL数据库是一个小型关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

之前用 C 语言连了mysql数据库,因为项目毕竟是用QT包装的,还需要在QT的界面里显示,所以这一次就用QT来连一下mysql

在linux下QT连接Mysql数据库(qt和mysql数据库连接)  QT mysql linux 第1张

首先说一下我的电脑是ubuntu10.10;之前安装了QTlinux全部套件(包括QT creator),也安装了嵌入式qt的那三个编译环境(X11,X86,ARM),但是这一次我只用QT creatot里的qmake编译(以为之前编译完那三个环境后,我就把编译文件夹全删了)。

首先,安装mysql客户端(mysql-devel),和C语言连接一样,执行命令:

  1. sudoapt-getinstalllibmysqlclient-dev
  2. sudoapt-getinstalllibmysqlclient15-dev

因为我之前安装过,所以这一步就省略了。

然后,连接linux数据库肯定要有驱动,这个在qt的源码里就有:进入文件夹:

  1. cdQTDIR/src/plugins/sqldrivers/mysql//这就是qt存放mysql驱动源码的目录

目录里应该有main.cpp 和moc_qsql_mysql.cpp两个文件

执行命令:

  1. qmake-project//生成mysql.pro文件,可能这一步会说你没有权限,那么chmod给它权限就可以了
  2. qmake"INCLUDEPATH+=/usr/include/mysql""LIBS+=-L/usr/lib/mysql-lmysqlclient_r"mysql.pro
  3. /usr/include/mysql//mysql所有头文件所在的位置,mysql.h就在此处
  4. /usr/lib/mysql//mysql库的位置

然后,执行命令:

  1. make
  2. sudomakeinstall

此时,在QTDIR/src/plugins/sqldrivers/mysql 这个目录下,就生成了一个文件:libqsqlmysql.so;把它拷贝到QTDIR/plugins/sqldrivers, 目录下面;

现在开始编程:随便建工程:加入如下代码:

  1. #include<QtSql>
  2. #include<QMessageBox>
  3. #include<QTextStream>
  4. QTextStreamout(stdout);
  5. QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL");
  6. db.setHostName("localhost");
  7. db.setDatabaseName("test");
  8. db.setUserName("root");
  9. db.setPassword("xxxxxx");
  10. if(!db.open())
  11. {
  12. QMessageBox::critical(0,QObject::tr("DatabaseError"),db.lastError().text());
  13. returna.exec();
  14. }
  15. QSqlQueryquery;
  16. query.exec("SELECT*FROMt_homedata");
  17. while(query.next())
  18. {
  19. QStringid=query.value(0).toString();
  20. QStringtype=query.value(1).toString();
  21. QStringdata=query.value(2).toString();
  22. out<<id<<","<<type<<","<<data<<endl;
  23. }

注意,这段代码,是我加入到工程中的,恩,我就放在main.cpp里;#include <QtSql>这个是必须的;#include <QTextStream>这个是用来进行控制台打印输出的,我的数据库名为test,中间有一个表叫t_homedata,表里有三个varchar型字段:其打印结果为:

  1. 100010,23,32.45
  2. 100011,12,99
  3. 100012,11,35.10

注意,再进行工程的编译和运行之前(恩,因为我的电脑里实际有4个qt编译环境,所以还需要再Qtcreator的project选项里设置该项目的编译器,我的编译器设置为qt-opensource,即Qt creator自带的,因为我之前所进行的mysql驱动编译也都是再Qtcreator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行:

  1. QT+=sql

Qt帮助文档里就是这么说的:

  1. Toincludethedefinitionsofthemodule'sclasses,usethefollowingdirective:
  2. #include<QtSql>
  3. Tolinkagainstthemodule,addthislinetoyourqmake.profile:
  4. QT+=sql
  5. defineDRIVER"QMYSQL3"/*seetheQtSQLdocumentationforalistofavailabledrivers*/
  6. defineDATABASE":dehua:"/*thenameofyourdatabase*/
  7. defineUSER"root"/*usernamewithappropriaterights*/
  8. definePASSWORD"password"/*passwordforUSER*/
  9. defineHOST"http://192.168.10.14"/*hostonwhichthedatabaseisrunning*/
  10. boolServerInfo::connMysql(intcsID,QStringmsg)
  11. {
  12. MYSQLmysql;
  13. charhost[32]="localhost";
  14. charuser[32]="root";
  15. charpasswd[32]="password";
  16. chardbname[32]="dehua";
  17. QStringsql;
  18. if(mysql_init(&mysql)==NULL)/*初始化数据结构*/
  19. {
  20. syslog(LOG_USER|LOG_INFO,"initalmysqlhandleerror\n");
  21. returnFALSE;
  22. }
  23. if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0)==NULL)/*连接数据库*/
  24. {
  25. syslog(LOG_USER|LOG_INFO,"Failedtoconnecttodatabase:Error:%s\n",mysql_error(&mysql));
  26. returnFALSE;
  27. }
  28. msg.replace("'","");//去掉单引号
  29. sql=QString("insertintosocRec(socketID,message)values(%1,'%2')")
  30. .arg(csID)
  31. .arg(msg);/*构造SQL语句*/
  32. qWarning(sql);
  33. if(mysql_query(&mysql,sql)!=0)/*执行SQL语句,进行检索数据*/
  34. {/*执行SQL语句出错*/
  35. syslog(LOG_USER|LOG_INFO,"selectps_infoError:%s\n",mysql_error(&mysql));
  36. qWarning("false");
  37. }
  38. else
  39. {
  40. qWarning("true");
  41. }
  42. }

【编辑推荐】

Qt数据库之添加MySQL驱动插件

使用TOMCAT连接池连接MySQL

C++连接mysql数据库的两种方法

如何安全的远程使用MySQL GUI工具

解析Visual Studio 2005中QT配置使用

转载请说明出处
知优网 » 在linux下QT连接Mysql数据库(qt和mysql数据库连接)

发表评论

您需要后才能发表评论