天天看点

qt ODBC操作mysql数据库

1.连接

可以参考博客

2.常用操作实例

这里都是做MaoExpress(软件设计课作业)的后端代码片段

需要注意

在操作时记住用Navicat观察服务器数据库上的数据是否更新成功。

2.1查询

查询userID是否与已有ID重复

QSqlQuery result = db.exec(" select * from SuperUserTable");
    QString userIdValue;
    QString pswValue;
    QString nameValue;

    while(result.next()){
        userIdValue=result.value("userID").toString();
        nameValue=result.value("_name").toString();
        pswValue=result.value("_password").toString();

        if(userID==userIdValue){

        isRedundant=true;

        }/*if(userID.toInt()==userIdValue)*/

    }/*while(result.next())*/
           

2.2增加

下面这种给准备prepare的SQL语句设置几个参数的情况,除了下面给出的qsQuery.bindValue()

还有另一种写法 qsQuery.addbindValue()

参考博客

QString strSqlText("insert into StationUserTable (userId,_name,_password,siteId)\
                                        values (:userId,:_name,:_password,:siteId)");
          qsQuery.prepare(strSqlText);
          qsQuery.bindValue(":userId",userID);
          qsQuery.bindValue(":_name",name);
          qsQuery.bindValue(":_password",pw);
          qsQuery.bindValue(":siteId",userSiteId);
          bool result_successed =qsQuery.exec();
          if(result_successed){

              qDebug()<<"插入用户信息成功";

          }else{

              qDebug()<<"插入用户信息失败!";
              qDebug()<<"error open database because"<<db.lastError().text();

          }
           

2.3更新

这里有一个修改昵称的例子,这里有一点要注意,如果字符串有中文信息,那么它的两边的单引号不能少。

其次,若拼接的字符串为其它类型(例如int)转QString类型,会出现不报错但修改失败的情况

QSqlQuery query(db);

        bool res = query.exec(QString("UPDATE    "+ whichTableToFind + "   SET   _name='" + newName + "'    where userId='" + globalUserId+"'" ));

        if(res){
            qDebug() << "修改_name成功";
            globalUserName = newName;
        }
        else{
            qDebug()<<"table"<<whichTableToFind<<"newname"<<newName<<query.lastError();
            qDebug() << "修改失败"<<db.lastError().text();
        }
           

(下为摘抄)

QSqlQuery qsQuery = QSqlQuery(db);
    QString strSqlText("UPDATE UserInput SET AssessDate = :AssessDate \
                       WHERE ID = :ID");
    qsQuery.prepare(strSqlText);
    qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
   
    qsQuery.bindValue(":ID", id);
    qsQuery.exec();
    CommitDB(qsQuery);
           

2.4删除

QSqlQuery qsQuery = QSqlQuery(db);
    QString strSqlText("DELETE FROM UserInput WHERE ID = :ID");
    qsQuery.prepare(strSqlText);
    qsQuery.bindValue(":ID", id);
    qsQuery.exec();
    CommitDB(qsQuery);
           

3.补充

3.1 exec() 中的字符串是所执行的SQL语句,支持运算符 ‘+’

比如

QString whichTableToFind="xxxtable"
 
QSqlQuery result = db.exec(" select siteId from " + whichTableToFind);  //查询是否为站点管理员
resSite = result.value("siteId").toString();
    
           

继续阅读