使用QSqlQuery操纵mysql

 


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

    使用QSqlQuery操纵mysql_第1张图片

 

一 查询

  两种方式:

             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");


 

  

你可能感兴趣的:(Qt)