使用QSqlQuery操纵mysql

本文介绍了如何使用QSqlQuery进行MySQL数据库的查询和插入操作。通过直接式和prepare方法执行SQL语句,并展示了如何处理查询结果和绑定参数。QSqlQuery将数据库的不同数据类型映射到Qt的相应数据类型,如将VARCHAR转换为QString,DATETIME转换为QDateTime。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


使用QSqlQuery可以方便地查询数据信息,插入新的数据。下面是本文示例使用的表:

    

 

一 查询

  两种方式:

             1.直接式

     QSqlQuery  query; 

                query.exec(sqlstatement);

                例:  

    QSqlQuery  query;
       QString  str = time.toString();
       str = QObject::tr("select  tempreture , rtime from weathers where  time(rtime)  < '%1'").arg(time.toString() ) ;
       bool bRet = query.exec(str);
       if(!bRet)
         QString DbError = query.getLastError().text();

               上面的代码中使用了占位符来传递程序中的参数,注意%1要被单引号包住,sql语句没有最后的分号‘;’.

             2.使用prepare

                 QSqlQuery query;

                 query.prepare(sqlstatement);

                 query.exec();

                 例:                 

      QSqlQuery  query;
       query.prepare("select  tempreture , rtime from weathers where  time(rtime)  < ?  and date(rtime) = ? ");
         query.addBindValue(time.toString()); 
          query.addBindValue(QDate::currentDate());
          query.exec();

              在上面的代码中,?为占位符,addBindValue()按照点位符出现的顺序来绑定相应的参数。 

 

二. 处理查询结果     

 while(query.next()){
		 QString  tempreture = query.value(0).toString();
		 vecTempre.push_back(tempreture.toInt());
		 QString  theTime = query.value(1).toString();
		 qDebug()<< tempreture << theTime;
	 }

第一次调用next()将QSqlQuery()定位到返回的第一条记录,后续的next()调用每次将记录指针后移一条记录,直到记录末尾next()返回"false".

value()函数以QVariant类型按照参数中指定的编号返回一个字段的值,其中编号是这些字段在select语句中的排列顺序。

数据库中的不同数据类型被映射成相应的C++和Qt数据类型存储于QVariant变量中, 如VARCHAR被映射成QString类型,DATETIME被映射成QDateTime类型。

 

三. 插入数据 

  插入操作与查询基本相同,可以在QSqlQuery中直接执行,也可以prepare.即可以直接写入数据也可以采用占位符的方式。 

 QSqlQuery  query;
	  bool bRet = query.prepare("INSERT INTO weathers  (tempreture, humidity, wind_direction, wind_level, rtime,          updateTime )"
		                   "VALUES(:tempreture, :humidity, :wind_direction, :wind_level, :rtime, :updateTime)"); 
	  QString  dbError = query.lastError().text();

	  query.bindValue(":tempreture", QString::number(pInfo->tempreture));

 	  query.bindValue(":humidity", QString::number(pInfo->humidity));
	  query.bindValue(":wind_direction", QString::fromLocal8Bit(pInfo->wind_direction.c_str()));
	  query.bindValue(":wind_level", QString::number(pInfo->wind_level));
	  
	  QDateTime  day = QDateTime::currentDateTime();

	  QString  sday = day.toString(Qt::ISODate);
	  sday.replace("T", " ");
	  query.bindValue(":rtime",sday);

	  QString  time  = pInfo->time.c_str();
	  time += ":00";
	  query.bindValue(":updateTime" , time );
	 bRet =  query.exec();
	 dbError = query.lastError().text();
	 query.exec("commit");


 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值