linux下QT连接mysql数据库
文章分类:C++编程
之前用C语言连了mysql数据库,因为项目毕竟是用QT包装的,还需要在qt的界面里显示,所以这一次就用QT来连一下mysql
首先说一下我的电脑是ubuntu10.10;之前安装了QTlinux全部套件(包括qtcreator),也安装了嵌入式qt的那三个编译环境(X11X86ARM),但是这一次我只用qtcreatot里的qmake编译(以为之前编译完那三个环境后,我就把编译文件夹全删了)。
首先,安装mysql客户端(mysql-devel),和C语言连接一样,执行命令:
 
sudo apt-get install libmysqlclient-dev
sudo apt-get install libmysqlclient15-dev
 
因为我之前安装过,所以这一步就省略了。
然后,连接mysql数据库肯定要有驱动,这个在qt的源码里就有:进入文件夹:
cd  QTDIR/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
sudo make install
此时,在QTDIR/src/plugins/sqldrivers/mysql  这个目录下,就生成了一个文件:libqsqlmysql.so;把它拷贝到QTDIR/plugins/sqldrivers, 目录下面;
现在开始编程:
随便建工程:
加入如下代码:
 
非完成代码,应该加在哪儿,你懂的代码  
1. #include <QtSql> 
2. #include <QMessageBox> 
3. #include <QTextStream> 
4.  
5. QTextStream out(stdout); 
6.     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
7.     db.setHostName("localhost"); 
mysql下载下来是一个文件夹
8.     db.setDatabaseName("test"); 
9.     db.setUserName("root"); 
10.     db.setPassword("xxxxxx"); 
11.     if(!db.open()) 
12.     { 
13.         QMessageBox::critical(0,QObject::tr("Database Error"),db.lastError().text()); 
14.         return&(); 
15.     } 
16.     QSqlQuery query; 
17.     ("SELECT * FROM t_homedata"); 
18.     ()) 
19.     { 
20.         QString id = query.value(0).toString(); 
21.         QString type = query.value(1).toString(); 
22.         QString data = query.value(2).toString(); 
23.         out << id << ", " << type << ", " << data <<endl; 
24.     } 
 
 注意,这段代码,是我加入到工程中的,恩,我就放在main.cpp里;#include <QtSql>这个是必须的;#include <QTextStream>这个是用来进行控制台打印输出的,我的数据库名为test,中间有一个表叫
t_homedata,表里有三个varchar型字段:
其打印结果为:
 
 写道
100010, 23, 32.45
100011, 12, 99
100012, 11, 35.10
 
 注意,再进行工程的编译和运行之前(恩,因为我的电脑里实际有4qt编译环境,所以还需要再qtcreatorproject选项里设置该项目的编译器,我的编译器设置为qt-opensource,qtcreator自带的,因为我之前所进行的mysql驱动编译也都是再qtcreator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行:
QT  += sql
恩,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 */
1. define DATABASE     ":dehua:" /* the name of your database */
2. define USER         "root"   /* user name with appropriate rights */
3. define PASSWORD     "password"   /* password for USER */
4. define HOST         "192.168.10.14" /* host on which the database is running */
5.
6.
7. bool ServerInfo::connMysql(int csID, QString msg)
8. {
9.   MYSQL mysql;
10.   char host[32]="localhost";
11.   char user[32]="root";
12.   char passwd[32]="password";
13.   char dbname[32]="dehua";
14.  
15.   QString sql;
16.
17.   if( mysql_init(&mysql) == NULL ) /*初始化数据结构*/
18.   {
19.     syslog(LOG_USER|LOG_INFO,"inital mysql handle error\n");
20.     return FALSE;
21.   }
22.   if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL) /*连接数据库*/
23.   {
24.     syslog(LOG_USER|LOG_INFO, "Failed to connect to database: Error: %s\n",mysql
_error(&mysql));
25.     return FALSE;
26.   }
27.
28.   &place("'"," ");        //去掉单引号
29.    sql=QString("insert into socRec(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, "select ps_info Error: %s\n",mysql_error(&mysql));
36.     qWarning("false");
37.   }
38.   else
39.   {
40.     qWarning("true");
41.   }
42. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。