qt 5 數據庫操作(mysql)


其實大家都知道,QT5以上的都自帶了數據庫驅動,所以呢,基本上可以直接使用,於是如果想知道怎么連接數據庫,請參考這位大神寫的。http://qtdebug.com/DB-AccessMySQL.html

 

關於數據庫操作

QSqlDatabase db = QSqldatabase::addDataBase("QMYSQL"); //博主用的mysql

db.setHostName("127.0.0.1");                                             //本機地址

db.setDatabaseName("qt");                     //我在mysql里面創建了一個叫qt的數據庫

db.setUserName("root");                         //賬號

db.setPassword("59826****");                //密碼

if(!db.open())

{

qDebug()<<"打開數據庫失敗";

}

qDebug()<<"連接成功";

 

關於數據庫顯示在表格中

QTableView *_view = new QTableView;

QSqlTableModel *_model = new QSqlTableModel;

QVBoxLayout *lay = new QVBoxLayout(this);

_model->setTable("user");         //數據庫中的表格名稱

_model->selection();                 //選擇表中所有的數據

_view->setModel(_model);        //把_model傳給_view

 lay->addWidget(_view);           //增加一個空間到QVBoxLayout並且顯示

 

 

  增刪改查

 

  void slotAddClicked()

 {

   _model->database().transaction();               //開始事物

   QSqlRecord record = _model -> record();     // 用_model來獲取記錄(行)

   _model -> insertRecord(-1,record);             //增加到最后一行一個記錄

 }

void slotSubmitClicked()

{

       if(_model->submitAll())   

       _model->database().commit();             //提交

       else

      {

       _model->database().rollback();           //回滾

      QMessageBox::critical(this,"Error",QSqldatabase().lastError.text());

       }

}

 void slotDelClicked()

{

   QItemSelectionModel  * selectModel=view->selectionModel();         //通過view來獲取選中的部分數據model

   QModelIndexList  selectIndexList = selectModel->selectedIndexs();  // 通過selectModel來獲取被選中的索引(index)

   QList<int> delRow;                                                                       //存儲要刪除的行

   for(int i=0;i<selectIndexList.size(); ++i)                                        // 遍歷選擇的列表

   {

          QModelIndex index = selectIndexList.at(i);                                //將列表轉化為單個的Index

          delRow << index.row();                                                           // 將index對應的行加入delRow

   } 

   while(delRow.size()>0)

   {

       int row = delRow.at(0);

       delRow.removeAll(row);                                                               // 移除所有相同的行,去重

       model->removeRow(row);                                                           // 移除該行

   }

      model->submitAll();                    

}

void slotFilter(QString filter)

{

   QSqlRecord record = model -> record();                                   //獲取所有記錄

   QString modelFilter;                                                       //總的篩選條件  xx like xx or xxx like xxx這種形式的字符串

   if(filter.isEmpty)

   {

    model->setFilter(" ");

    model->select();

    return;

   }

   for(int i=0;i<record.count();++i)

   {

     if(i!=0)

    {

     modelFilter +="or";

    }

     QString field = record.field(i);                                        // 將每行字段里面的內容都放進去

     QString subFilter = QString().sprintf("%s like '%%%s%%'",field.toUtf8().data(),filter.toUtf8().data());

     modelFilter +=subFilter

   }

   model ->setFilter(modelFilter);                                        //過濾

   model->select();                                                            //刷新

}

 

 

作者 : Ten10

持續更新,未完待續

本文章屬於作者原創,如需轉載請注明  http://i.cnblogs.com/EditPosts.aspx?opt=1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM