QT数数据库Mysql中 QSqlQuery、QSqlQueryModel 、和QSqlTableModel实现增删改查?代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT数数据库Mysql中 QSqlQuery、QSqlQueryModel 、和QSqlTableModel实现增删改查?代码相关的知识,希望对你有一定的参考价值。

数据库驱动:QSQLITE
数据库:diancai.db
数据表:caipin

    用qsqltablemodel的insetrow()、setdata()、submitall()函数实现增;

   officeTable->insertRow(0);

   officeTable->setData(officeTable->index(0, 0), row);

   officeTable->setData(officeTable->index(0, 1), newWnd->imageFileEditor->currentIndex());

   officeTable->setData(officeTable->index(0, 2), newWnd->locationText->text());

   officeTable->setData(officeTable->index(0, 3), newWnd->countryText->currentText());

   officeTable->setData(officeTable->index(0, 4), newWnd->descriptionEditor->toPlainText());

   officeTable->submitAll();

 

    用removerow()、submitall()函数实现删;

   int officeCount = officeTable->rowCount();

   officeTable->removeRow(id);

   for(int i = id; i < officeCount - 1;i++)

   

    officeTable->setData(officeTable->index(i, 0), i);

   

   officeTable->submitAll();


    用QSqlRecord类的setvalue实现改;

    QSqlRecord recordCurrentRow = officeTable->record(id);

    recordCurrentRow.setValue("id", id - 1);

    officeTable->setRecord(id - 1, recordCurrentRow);

    officeTable->submitAll();

 

    用QSqlRecord类的.value进行比较实现查;

  int Dialog::findArtistId(const QString &artist)

  

      QSqlTableModel *artistModel = model->relationModel(2);

    int row = 0;

 

      while (row < artistModel->rowCount()) 

          QSqlRecord record = artistModel->record(row);

          if (record.value("artist") == artist)

              return record.value("id").toInt();

          else

              row++;

     

      return addNewArtist(artist);


 

参考技术A 最好的方法是看帮助文档,安装个SDK包含QT Creator的,里面有详细的介绍和例子

QSqlQuery最后无法正常工作

我试图在SQLite中获取已执行查询的大小,但是当我使用last并尝试使用last时,它始终为false 这是我正在尝试执行的代码

void createDB() {
  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","CREATE_CON");

  db.setDatabaseName("C:/Desktop/TestDb.db3");
  db.open();

  QSqlQuery q(db);
  q.exec("CREATE TABLE IF NOT EXISTS Test(testCol TEXT PRIMARY KEY);");
}

int entries() {
  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","SELECT_CON");

  db.setDatabaseName("C:/Desktop/TestDb.db3");
  db.open();

  QSqlQuery q(db);
  q.exec("SELECT * FROM Test;");

  if(q.last() == false) {
    qDebug()<<q.lastError().text();
    qDebug()<<db.lastError().text();
  }
  return q.at()+1;
}

我得到的错误文本是空的,所以我不知道我做错了什么。 我可以很好地创建数据库,以便我的数据库实例正常工作。 操作系统:Windows 10 我正在使用:Qt 5.10.1 Compilator:MinGW

以上是关于QT数数据库Mysql中 QSqlQuery、QSqlQueryModel 、和QSqlTableModel实现增删改查?代码的主要内容,如果未能解决你的问题,请参考以下文章

在vs中,qt连接mysql运行时,出现QSqlQuery::exec:database not open,如何解决

Modle/View/Delegate框架+QSqlQuery类实现QT和MYSQL交互

qt : QSqlQuery 返回 QVariant 的向量

Qt SQL:QSqlQuery

42.QT-QSqlQuery类操作SQLite数据库(创建查询删除修改)详解

QSqlQuery最后无法正常工作