在linux下QT连接Mysql数据库
创始人
2024-07-31 10:41:25
0

之前用 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     
  2. #include     
  3. #include     
  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 <
  23. }   

注意,这段代码,是我加入到工程中的,恩,我就放在main.cpp里;#include 这个是必须的;#include 这个是用来进行控制台打印输出的,我的数据库名为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  
  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配置使用

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...