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 这个是必须的;#include

这个是用来进行控制台打印输出的,我的数据库名为test,中间有一个表叫

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. }


本文标签: 进行 编译 数据库 语句