在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语言连接一样,执行命令:

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

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

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

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

目录里应该有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库的位置 
  • 1.
  • 2.
  • 3.
  • 4.

然后,执行命令:

make  
sudo make install 
  • 1.
  • 2.

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

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

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

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

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

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

QT  += sql 
  • 1.

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

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

2019-12-17 08:39:21

Linuxwindowsoracle

2010-06-10 14:49:56

MySQL镜像数据库

2011-06-21 15:31:04

Qt 数据库 SQL

2011-06-21 15:11:04

QT 数据库

2023-09-21 09:31:24

MySQL数据库

2010-05-14 09:57:25

MySQL数据库

2010-05-13 17:41:58

2011-04-07 15:02:02

LinuxMySQL数据库

2011-07-05 09:54:04

2010-05-14 16:41:58

MySQL镜像数据库

2013-05-24 13:24:46

Mysql数据库自动备份

2010-05-20 09:45:22

连接MySQL
点赞
收藏

51CTO技术栈公众号