在linux下QT连接Mysql数据库

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

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

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

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

  1. sudo apt-get install libmysqlclient-dev   
  2. 或   
  3. sudo apt-get install libmysqlclient15-dev  

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

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

  1. cd   QTDIR/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. sudo make install 

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

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

  1. #include <QtSql>    
  2. #include <QMessageBox>    
  3. #include <QTextStream>    
  4. QTextStream out(stdout);    
  5. QSqlDatabase db = 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("Database Error"),db.lastError().text());    
  13. return a.exec();    
  14. }    
  15. QSqlQuery query;    
  16. query.exec("SELECT * FROM t_homedata");    
  17. while(query.next())    
  18. {    
  19. QString id = query.value(0).toString();    
  20.  QString type = query.value(1).toString();    
  21. QString data = 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编译环境,所以还需要再Qt creator的project选项里设置该项目的编译器,我的编译器设置为qt-opensource,即Qt  creator自带的,因为我之前所进行的mysql驱动编译也都是再Qt creator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行:

  1. QT  += sql 

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

  1. To include the definitions of the module's classes, use the following directive:  
  2.  #include <QtSql> 
  3. To link against the module, add this line to your qmake .pro file:  
  4.  QT += sql  
  5. define DRIVER       "QMYSQL3"  /* see the Qt SQL documentation for a list of available drivers */  
  6.  define DATABASE     ":dehua:" /* the name of your database */  
  7.  define USER         "root"   /* user name with appropriate rights */  
  8.  define PASSWORD     "password"   /* password for USER */  
  9.  define HOST         "http://192.168.10.14" /* host on which the database is running */  
  10.  bool ServerInfo::connMysql(int csID, QString msg)  
  11.  {  
  12.    MYSQL mysql;  
  13.    char host[32]="localhost";  
  14.    char user[32]="root";  
  15.    char passwd[32]="password";  
  16.    char dbname[32]="dehua";   
  17.    QString sql;  
  18.    
  19.    if( mysql_init(&mysql) == NULL ) /*初始化数据结构*/  
  20.    {  
  21.      syslog(LOG_USER|LOG_INFO,"inital mysql handle error\n");  
  22.      return FALSE;  
  23.    }  
  24.    if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL) /*连接数据库*/  
  25.    {  
  26.      syslog(LOG_USER|LOG_INFO, "Failed to connect to database: Error: %s\n",mysql_error(&mysql));  
  27.      return FALSE;  
  28.    }  
  29.    
  30.     msg.replace("'"," ");        //去掉单引号  
  31.     sql=QString("insert into socRec(socketID,message) values(%1,'%2')")  
  32.                                     .arg(csID)  
  33.                                  .arg(msg); /*构造SQL语句*/  
  34.     qWarning(sql);  
  35.    if(mysql_query(&mysql,sql) != 0) /*执行SQL语句,进行检索数据*/  
  36.    { /*执行SQL语句出错*/  
  37.      syslog(LOG_USER|LOG_INFO, "select ps_info Error: %s\n",mysql_error(&mysql));  
  38.      qWarning("false");  
  39.    }  
  40.    else  
  41.    {  
  42.      qWarning("true");  
  43.    }  
  44.  } 

 【编辑推荐】

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

使用TOMCAT连接池连接MySQL

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

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

解析Visual Studio 2005中QT配置使用

责任编辑:zhaolei 来源: 互联网
相关推荐

2010-06-11 14:46:13

MySQL数据库

2011-07-05 09:35:52

Ubuntu Qt Mysql

2010-06-04 18:12:17

MySQL 数据库启动

2010-10-26 15:00:36

oracle远程连接数

2011-07-05 10:16:16

Qt 数据库 SQLite

2011-07-05 10:03:00

Qt MYSQL 数据库

2011-08-30 13:59:06

QTMysql数据库

2010-06-04 17:49:46

连接MySQL数据库

2010-06-10 14:49:56

MySQL镜像数据库

2019-12-17 08:39:21

Linuxwindowsoracle

2011-06-21 15:11:04

QT 数据库

2011-06-21 15:31:04

Qt 数据库 SQL

2023-09-21 09:31:24

MySQL数据库

2010-05-13 17:41:58

2010-05-14 09:57:25

MySQL数据库

2011-04-07 15:02:02

LinuxMySQL数据库

2011-07-05 09:54:04

2010-05-20 09:45:22

连接MySQL

2010-05-14 16:41:58

MySQL镜像数据库

2013-05-24 13:24:46

Mysql数据库自动备份
点赞
收藏

51CTO技术栈公众号