天天看點

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

繼續閱讀