• 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

  • 相关阅读:
    VS2012打包部署Winform程序
    WPF 触发器Triggers
    VS2010中的顺序图
    decimal,float和double的区别
    EXCEL基本知识
    java byte 循环左移 循环右移 rotateLeft rotateRight
    博客地址转移
    PHP学习思维导图
    一款web前端在线编辑器
    9patch android .9格式使用
  • 原文地址:https://www.cnblogs.com/Ten10/p/Ten17.html
Copyright © 2020-2023  润新知