admin 管理员组文章数量: 887021
2024年1月23日发(作者:synchronized会出现死锁吗)
linux下QT连接mysql数据库
文章分类:C++编程
之前用C语言连了mysql数据库,因为项目毕竟是用QT包装的,还需要在qt的界面里显示,所以这一次就用QT来连一下mysql。
首先说一下我的电脑是ubuntu10.10;之前安装了QT的linux全部套件(包括qtcreator),也安装了嵌入式qt的那三个编译环境(X11,X86,ARM),但是这一次我只用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驱动源码的目录
目录里应该有 和moc_qsql_两个文件
执行命令:
qmake -project 生成文件,可能这一步会说你没有权限,那么chmod给它权限就可以了
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r"
/usr/include/mysql mysql所有头文件所在的位置,mysql.h就在此处
/usr/lib/mysql mysql库的位置
然后,执行命令:
make
sudo make install
此时,在QTDIR/src/plugins/sqldrivers/mysql 这个目录下,就生成了一个文件:;把它拷贝到QTDIR/plugins/sqldrivers, 目录下面;
现在开始编程:
随便建工程:
加入如下代码:
非完成代码,应该加在哪儿,你懂的代码
1. #include
2. #include
3. #include
4.
5. QTextStream out(stdout);
6. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
7. tName("localhost");
8. abaseName("test");
9. rName("root");
10. sword("xxxxxx");
11. if(!())
12. {
13. QMessageBox::critical(0,QObject::tr("Database Error"),ror().text());
14. return ();
15. }
16. QSqlQuery query;
17. ("SELECT * FROM t_homedata");
18. while(())
19. {
20. QString id = (0).toString();
21. QString type = (1).toString();
22. QString data = (2).toString();
23. out << id << ", " << type << ", " << data < 24. } 注意,这段代码,是我加入到工程中的,恩,我就放在里;#include t_homedata,表里有三个varchar型字段: 其打印结果为: 写道 100010, 23, 32.45 100011, 12, 99 100012, 11, 35.10 注意,再进行工程的编译和运行之前(恩,因为我的电脑里实际有4个qt编译环境,所以还需要再qtcreator的project选项里设置该项目的编译器,我的编译器设置为qt-opensource,即qtcreator自带的,因为我之前所进行的mysql驱动编译也都是再qtcreator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行: QT += sql 恩,qt 帮助文档里就是这么说的: To include the definitions of the module's classes, use the following directive: #include 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. 2. 3. 4. define DATABASE ":dehua:" /* the name of your database */ define USER "root" /* user name with appropriate rights */ define PASSWORD "password" /* password for USER */ define HOST "192.168.10.14" /* host on which the database is running */ 5. 6. 7. 8. 9. bool ServerInfo::connMysql(int csID, QString msg) { 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 errorn"); 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: %sn",mysql_error(&mysql)); 25. return FALSE; 26. } 27. 28. e("'"," "); //去掉单引号 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: %sn",mysql_error(&mysql)); 36. qWarning("false"); 37. } 38. else 39. { 40. qWarning("true"); 41. } 42. }
版权声明:本文标题:linux下QT连接mysql数据库 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705953216h495413.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论